【问题标题】:MATLAB: making a histogram plot from csv files read and put into cells?MATLAB:从读取并放入单元格的csv文件制作直方图?
【发布时间】:2018-11-09 12:28:08
【问题描述】:

很遗憾,我不是太精通技术,只有基本的 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) 的本质是什么,以及我能/不能用它们做什么。 histogram 命令需要一个矩阵输入,所以大概我需要一个“矩阵向量”和一个在单独的图中绘制每个向量元素(即矩阵)的命令。我总共有大约 14 个,这相当多并且需要很长时间才能加载,但我不确定如何更有效地进行。

概括问题:

稍后我将编写一个脚本来减少噪音并平滑 csv 文件中的数据,并将其二值化(csv 文件适用于形状模糊的嘈杂图像,我想通过设置剪切来区分这些形状off 用于 csv 矩阵中的像素强度/值,例如创建显示这些形状的二进制图像)。理想情况下,我想一次将其应用于我文件夹中的所有图像,这样我就可以转移出哪些图像最适合分析。所以我的问题是,我怎样才能运行一个包含我文件夹中所有 csv 文件的脚本,以便我可以一次比较它们?我认为我用于直方图的任何技术也适用于此,但我不确定。

编写一个脚本可能会更好: - 为文件夹中的每个 csv 文件制作直方图和/或运行二值化脚本 - 并将所有图像放入一个新的指定文件夹中,这样我就可以筛选这些。

我将非常感谢有关如何执行此操作的指示。正如我所提到的,我对编程很陌生,在查看建议时会感到不知所措,看到各种不同的命令显然可以实现相同的目的——一次读取多个文件。

【问题讨论】:

    标签: matlab file csv save


    【解决方案1】:

    函数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
    

    试一试,让我知道它是否有效。如果不是,请上传文件示例。

    【讨论】:

    • 您好 Pablo,感谢您的回复。我认为将 csvread 读入单元数组是不必要的,尽管我可能对此非常错误。老实说,我不太确定创建单元阵列的效用。我想要处理的只是 csv 文件,所以只保留结构 d 肯定不会有什么坏处,并且对于每个 d(i) 运行 M= csvread(d(i).name),将我的代码应用于M 并将我需要的内容保存到另一个文件中,然后对下一个 i 执行相同操作?我对数据类型感到相当困惑,例如在我原来问题的代码中,m 的元素被称为“单元格”
    • 但它们是我目录中的 csvread 文件?如何从“单元格”转到 csv 中的值矩阵,这是我需要将后续代码应用到的地方?
    • 我的建议是阅读矩阵M 并将其存储在矩阵中(当时是3D),然后继续。如果不是关键,我不会使用细胞。它们不如矩阵有效,并且与大括号和普通括号有点混淆。
    • 请上传您拥有的一个小 csv 文件的屏幕截图以及 csvread @21joanna12 如何读取它
    【解决方案2】:

    函数csvread(filename) 总是返回作为数值矩阵的矩阵 M,并且永远不会将单元格作为返回值。 如果您在 .csv 文件中有文本数据,它会给您一个错误,因为没有数字数据。我在读取文件时看到使用元胞数组的唯一原因是,如果从每个文件中读取的单个矩阵的维度不同,例如第一个 .csv 文件包含组织为 3xA 的数据,第二个 .csv 文件包含组织为的数据2xB,因此您可以将它们全部放在一个结构中。

    但是,仍然可以在单元格数组上使用直方图,方法是将元素提取为数组而不是将其提取为单元格元素。

    如果M 是一个单元矩阵,则有两种提取数据的选项: M(i)M{i}M(i) 会给你单元格元素,不能用于histogram,但是M{i} 会以其初始形式返回元素,即数字矩阵。

    TL;DR 使用 histogram(M{i}) 而不是 histogram(M(i))

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2013-01-11
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多