我无法将 BB
的值保存在 Bv
中。
MATLAB 返回此错误:
Subscripted assignment dimension mismatch.
请帮我做一下。
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
最佳答案
正如 @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
。单元格可以通过索引访问,而结构则不能。然而,对于结构,您可以使用简单的名称来记住每个元素中存储的内容,但这对于单元格来说是不可能的。
关于matlab - 矩阵维度不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206297/