矩阵的尺寸不匹配

时间:2014-11-29 19:42:51

标签: matlab matrix

我无法在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

1 个答案:

答案 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,请参阅herei是虚构的单位,为了防止错误,最好不要覆盖内置函数。

仅举例说明单元格数组如何存储不同的数据类型和大小:

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。可以通过索引访问单元格,结构不能。然而,对于结构,您可以使用简单的名称来记住您在每个元素中存储的内容,而对于单元格来说则不可能。