我无法在BB
中保存Bv
的值。
MATLAB返回此错误:
订阅的分配维度不匹配。
请帮我做。
X=[1 6 9 5; 6 36 54 30; 9 54 81 40; 5 30 40 25]
[N1,dim1]=size(X) ;
for i=1:N1
bb=X(i:end,1)*X(i,i:end);
BB=bb(triu(true(size(bb))))
Bv(i,:)=BB(:);
end
答案 0 :(得分:2)
正如@Rashid建议的那样,使用单元格数组而不是数字数组。单元阵列的优点在于它可以在1个存储单元中存储不同类型和大小的矩阵。它很像一个结构,但有索引可以轻松调用条目。
X=[1 6 9 5; 6 36 54 30; 9 54 81 40; 5 30 40 25];
for ii=1:size(x,1)
bb=X(ii:end,1)*X(ii,ii:end);
BB=bb(triu(true(size(bb))))
Bv{ii,:}=BB(:);
end
请注意,我还将您的循环索引更改为使用ii
而不是i
,请参阅here。 i
是虚构的单位,为了防止错误,最好不要覆盖内置函数。
仅举例说明单元格数组如何存储不同的数据类型和大小:
A = magic(2); % 2x2 double
B = uint8(magic(3)); % 3x3 uint8
C = 'hello world'; % string
YourCell{1} = A;
YourCell{2} = B;
YourCell{3} = C;
YourCell =
[2x2 double] [3x3 uint8] 'hello world'
同样但现在作为结构:
YourStruct.magic2double = A;
YourStruct.magic3uint8 = B;
YourStruct.MyString = C;
YourStruct =
magic2double: [2x2 double]
magic3uint8: [3x3 uint8]
MyString: 'hello world'
单元格和结构包含相同的信息,但是对于您调用YourCell{ii}
的单元格中的信息,在结构中您必须调用YourStruct.variablename
。可以通过索引访问单元格,结构不能。然而,对于结构,您可以使用简单的名称来记住您在每个元素中存储的内容,而对于单元格来说则不可能。