在matlab中检查具有潜在尾随单一维度的矩阵大小

时间:2013-03-19 17:48:53

标签: matlab

我想验证(在函数中),矩阵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

3 个答案:

答案 0 :(得分:3)

validateattributes完成工作:

 validateattributes(A, {'numeric'}, {'size', [ a b c ]});
如果c=1A具有正确的尺寸,则

不会失败。

答案 1 :(得分:1)

size(A)的输出因其调用方式而异。对于您的情况,您可以简单地使用:

[a1,b1,c1] = size(A);
if(any([a1,b1,c1]~=[ a b c ]))
    error('bad size');
end

答案 2 :(得分: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

显然,如果超出第三个尺寸的A尺寸是单个尺寸,这将认为尺寸不合适......但这可能是可以接受的。