【问题标题】:How to store variable length arrays?如何存储变长数组?
【发布时间】:2014-12-03 10:29:42
【问题描述】:

我想存储一个在 for 循环的每次迭代中改变其大小的数组。 例如,

for y=1:100
    for x=1:50
.
.
        ms(:,x,y) = ans;
.
.
    end 
end

“ans”是一个行向量,在 y 的每次迭代中都会改变其大小。

如何将这些可变长度的“ans”存储到 ms 中?

当我尝试将“ms”初始化为单元格时,它会显示一条错误消息“无法从双精度单元格转换为单元格”。

我有什么方法可以解决这个问题?

谢谢 亲切的问候

【问题讨论】:

  • 使用元胞数组,即{}而不是()

标签: matlab cell-array variable-length-array


【解决方案1】:

一种方法:

ms = {};
for y=1:100
    for x=1:50
       ms = [ms 1:x];
       % or
       % ms = [ms new_cell_element];
    end 
end

您还可以使用ms{x,y} = 1:3; 索引元胞数组 new_cell_element 不需要是一个单元格,它可以是任何你想要的东西。

ms = [ms, 'A string', (1:5).'] %// Works! 

请注意,我不建议这样做,而且我很确定还有其他方法可以做到这一点,具体取决于您想要在这些嵌套循环中执行的操作。您应该查看cellfun,并阅读cells

另外,从不在 MATLAB 中使用 ans 作为变量名。那只会给你带来麻烦。任何其他名称都更好(except clear and builtin)

【讨论】:

  • 啊哈哈哈,彼此相差约 30 秒。这很有趣:)
  • 哈!你是 waaay 来减慢@rayryeng 的!我会给你+1,但看到你仍然有ans 作为变量名,我就是做不到=P
【解决方案2】:

我能想到的唯一方法是确实使用元胞数组。像这样初始化一个二维元胞数组:

ms = cell(50,100);

之后,您可以使用花括号 ({}) 对单元格进行索引。因此,您的循环将如下所示:

for y=1:100
    for x=1:50
.
.
        ms{x,y} = ans;
.
.
    end 
end

完成后,您可以通过选择所需的行和列位置来索引元胞数组:

vec = ms{row,col};

顺便说一句,我不建议您使用 ans 作为变量。 ans 是在 MATLAB 中执行具有输出的语句时使用的默认变量,并且您没有指定函数的输出将去往何处的变量。您的代码可能会覆盖 ans 变量,因此您或许应该使用其他名称。

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2016-08-25
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多