【问题标题】:'Array of arrays' in matlab?matlab中的“数组数组”?
【发布时间】:2010-05-05 01:05:59
【问题描述】:

嘿,有点麻烦。尝试将可变长度的一维数组分配给数组的不同值,例如

a(1) = [1, 0.13,0.52,0.3];
a(2) = [1, 0, .268];

但是,我得到了错误:

???  In an assignment  A(I) = B, the number of elements in B and
 I must be the same.

Error in ==> lab2 at 15
a(1) = [1, 0.13,0.52,0.3];

我认为这意味着它需要一个标量值而不是一个数组。有人知道如何将数组分配给这个值吗?

我宁愿不直接将其定义为二维数组,因为它是为了解决循环中的不同问题

编辑:知道了!

a(1,1:4) = [1, 0.13,0.52,0.3];

a(2,1:3) = [1, 0, .268];

【问题讨论】:

  • 您是否预先分配了一个?如果有,怎么做?
  • 我没有预先分配它,我认为我不需要
  • 据我所知,这不能用数组来完成。如果要将数组存储到单个地址中,请尝试 cell 或 struct 数据类型。如果我可以具体问一下,是什么阻止您使用二维数组?

标签: arrays matlab


【解决方案1】:

你可能想写的是

a(1,:) = [1, 0.13,0.52,0.3];
a(2,:) = [1, 0, .268];

即第一行是[1, 0.13,0.52,0.3],第二行是[1, 0, .268]。这是不可能的,因为 a(2,4) 的值是多少?

有两种方法可以解决问题。

(1) 使用元胞数组

a{1} = [1, 0.13,0.52,0.3];
a{2} = [1, 0, .268];

(2) 如果您知道您的解决方案可能拥有的最大列数,您可以预先分配您的数组,并像这样写入结果(如果您不预先分配,您将 得到零填充。如果有很多迭代,您还可能会大大降低循环速度,因为每次迭代都必须重新创建数组。

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers

tmp = [1, 0.13,0.52,0.3];
a(1,1:length(tmp)) = tmp;
tmp = [1, 0, .268];
a(2,1:length(tmp)) = tmp;

【讨论】:

  • 使用方法 (1) 如果您知道每个数组的长度(所有这些数组的长度都不同),有没有办法可以初始化 'a' 以便您可以预分配内存?跨度>
  • @clairharrison:是的。 [a{1:33}] = deal(zeros(20,4)); 请注意,如果之前已声明 a,您必须清除它或将元胞数组显式声明为 a = cell(1,33)
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
相关资源
最近更新 更多