1

A行列のサイズがであるかどうかを(関数で)確認したいと思いa x b x cますc=1

これまでのところ:

if size(A) ~= [ a b c ]
    error('bad size');
end

ただし、次の場合c=1(およびA目的のサイズ):

size(A) = [ a b ]

size後続のシングルトン次元を削除するため。[a b]したがって、ベクトル(と[a b c])のサイズが同じでないため、比較の結果、エラーが発生します。

より良いものはありますか

if c == 1 && size(A) ~= [ a b ] || c ~= 1 && size(A) ~= [ a b c ]
    error('bad size');
end

4

3 に答える 3

3

validateattributesは仕事をします:

 validateattributes(A, {'numeric'}, {'size', [ a b c ]});

c=1Aの寸法が正しい場合は失敗しません。

于 2013-03-19T17:53:26.010 に答える
1

別の解決策はこれです:

if (size(A) ~= [ a b c ](1:ndims(A)))
    error('bad size');
end

これは、Aが3次元を超えない限り機能します。Aに3つ以上の次元がある場合は、事前に条件を設定する必要があります。

if (ndims(A)>3 || size(A)~=[a b c](1:ndims(A)))
    error('bad size');
end

明らかに、3番目を超えるAの次元がシングルトン次元である場合、これはそれを悪いサイズと見なします...しかし、それは許容できるかもしれません。

于 2013-03-20T00:03:11.660 に答える
1

の出力はsize(A)、呼び出される方法によって異なります。あなたの場合、単に使用できます:

[a1,b1,c1] = size(A);
if(any([a1,b1,c1]~=[ a b c ]))
    error('bad size');
end
于 2013-03-19T17:56:06.787 に答える