MATLAB:从读取并放入单元格的csv文件制作直方图吗?

时间:2018-11-09 12:28:08

标签: matlab file csv save

不幸的是,我不太精通技术,只有基本的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文件运行二值化脚本 -并将所有图像放入一个新的指定文件夹中,以便我进行筛选。

我非常感谢有关如何执行此操作的指示。正如我提到的那样,我对编程还很陌生,并且在查看建议时不知所措,看到各种用于实现相同功能的不同命令显然是一次读取多个文件。

2 个答案:

答案 0 :(得分:0)

函数csvread本机返回一个矩阵。我不确定,但是如果csv文件中的某些元素不是数字,Matlab可能会自动从输出中生成一个单元格数组。由于我不知道csv文件的结构,因此建议您尝试一些类似的功能(readtablexlsread):

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))