【问题标题】:Change empty matrices to zero matrices of the same dimensions in matlab在matlab中将空矩阵更改为相同维度的零矩阵
【发布时间】:2017-12-04 13:50:45
【问题描述】:

我对 matlab 比较陌生,所以这可能是一个简单的问题,对此我深表歉意。

我有一个包含各种尺寸单元格的单元格数组。有些是空矩阵(0x2 空矩阵、0x3 空矩阵、0x16 空矩阵......类似的东西),有些不是空矩阵。我正在尝试像这样绘制单元格数组:

for n = 1:numel(cellarray)
    plot(cellarray{1}(n))
    hold on
end

但是因为我有一些空矩阵,当我尝试运行这个循环和绘图时会收到一条错误消息。

有什么方法可以将单元格数组中的空矩阵更改为相同维度的零矩阵,这样我就可以在没有错误消息的情况下绘制它?非常感谢您提供的所有帮助!

【问题讨论】:

  • 你在cellarray的代码中的定义是什么,你的错误信息具体是什么?
  • 我的错误信息是“索引超出矩阵维度”,我解释为因为我的循环命中了第一个空矩阵,所以 cellarray{1}(n) 没有返回任何值,所以它不能绘制任何东西。
  • 如果你这样做plot(cellarray{n})会发生什么?

标签: matlab matrix plot cell-array is-empty


【解决方案1】:

您的所有代码正在执行或尝试执行的操作是打印元胞数组第一个元素的第 n 个元素。由于元胞数组的第一个元素包含少于 n 个元素,您会收到在 cmets 中显示的错误消息。

根据您的描述,听起来好像您希望它绘制元胞数组的第 n 个元素 - 它没有这样做。

你很可能想要,

for n = 1:numel(cellarray)
    if ~isempty(cellarray{n})
        plot(cellarray{n})
        hold on
    end
end

【讨论】:

    【解决方案2】:

    用 NaN 填充你的空单元格。 Matlab 不会绘制 NaN。如果您的所有内容都具有相同的大小或双精度,那么作为初学者会更容易理解,仅供参考。

    所以在你将任何东西放入你的单元格之前,请执行以下操作:

    Cellarray = repmat({NaN},3,3); % 无论你的细胞大小是多少

    【讨论】:

      【解决方案3】:

      您可以使用嵌套的 for 循环在元胞数组的每个元素中实现零值。

      for z=1:m
       for y=1:n
        for x=1:l
         Cellarray{x,y,z}=0;
        end
       end
      end
      

      您的矩阵是 m 个单元的 lxn 数组。

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多