matlab中的'数组数组'?

bco*_*lan 8 arrays matlab

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

a(1) = [1, 0.13,0.52,0.3];
a(2) = [1, 0, .268];
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

???  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];
Run Code Online (Sandbox Code Playgroud)

我认为这意味着它期望标量值而不是数组.有人知道如何将数组赋值给这个值吗?

我宁愿不直接将它定义为2d数组,因为它正在为循环中的不同问题做出解决方案

编辑:知道了!

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

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

Jon*_*nas 15

你可能想写的是

a(1,:) = [1, 0.13,0.52,0.3];
a(2,:) = [1, 0, .268];
Run Code Online (Sandbox Code Playgroud)

即第一行是[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];
Run Code Online (Sandbox Code Playgroud)

(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;
Run Code Online (Sandbox Code Playgroud)