不幸的是,我不太精通技术,只有基本的MATLAB /编程背景...
我在一个文件夹中有几个csv数据文件,并且想同时绘制所有这些文件的直方图以进行比较。我不确定该怎么做。一些在网上挖掘的人给出了脚本:
d=dir('*.csv'); % return the list of csv files
for i=1:length(d)
m{i}=csvread(d(i).name); % put into cell array
end
问题是我现在不能简单地编写histogram(m(i))
命令,因为m(i)是单元格类型,而不是csv文件类型(我不确定我是否正确使用了此术语,但是MATLAB绝对不是'不接受前者。
我不太确定如何进行。实际上,我不确定元素m(i)的确切性质以及我可以/不能使用它们做什么。直方图命令需要矩阵输入,因此大概我需要一个“矩阵向量”和一个将每个向量元素(即矩阵)绘制在单独图上的命令。我一共大约有14个,这相当多,而且加载时间很长,但是我不确定如何更有效地进行操作。
概括问题:
稍后,我将编写一个脚本来减少噪声并平滑csv文件中的数据,然后将其二值化(csv文件用于具有模糊形状的嘈杂图像,我想通过设置剪切来区分这些形状关闭以获取csv矩阵中的像素强度/值,例如创建显示这些形状的二进制图像)。理想情况下,我想一次将其应用于文件夹中的所有图像,这样我就可以移出最适合分析的图像。所以我的问题是,我该如何在文件夹中运行所有csv文件的脚本,以便可以一次比较所有文件?我认为直方图使用的任何技术都可以应用于此,但我不确定。
编写以下脚本可能会更好: -制作直方图和/或为文件夹中的每个csv文件运行二值化脚本 -并将所有图像放入一个新的指定文件夹中,以便我进行筛选。
我非常感谢有关如何执行此操作的指示。正如我提到的那样,我对编程还很陌生,并且在查看建议时不知所措,看到各种用于实现相同功能的不同命令显然是一次读取多个文件。
答案 0 :(得分:0)
函数csvread
本机返回一个矩阵。我不确定,但是如果csv
文件中的某些元素不是数字,Matlab可能会自动从输出中生成一个单元格数组。由于我不知道csv文件的结构,因此建议您尝试一些类似的功能(readtable
,xlsread
):
M = readtable(d(i).name) % Reads table like data, most recommended
M = xlsread(d(i).name) % Excel like structures, but works also on similar data
尝试一下,让我知道是否可行。如果没有,请上传文件样本。
答案 1 :(得分:0)
函数csvread(filename)
总是返回矩阵M,它是数值矩阵,并且永远不会将单元格作为返回值。
如果您在.csv文件中包含文本数据,则会由于没有数字数据而出现错误。我读取文件时使用单元格数组的唯一原因是,从每个文件读取的各个矩阵的尺寸是否不同,例如,第一个.csv文件包含组织为3xA的数据,第二个.csv文件包含组织为3xA的数据2xB,因此您可以将它们全部放在一个结构中。
但是,仍然可以在单元格数组上使用直方图,方法是将元素提取为数组而不是将其提取为单元格元素。
如果M
是一个单元矩阵,则有两种方法可以提取数据:
M(i)
和M{i}
。 M(i)
将为您提供单元元素,并且不能用于histogram
,但是M{i}
会返回其初始形式的元素,即数字矩阵。
TL; DR使用histogram(M{i})
代替histogram(M(i))
。