1

我想验证(在函数中),矩阵的大小Aa 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=1如果并且A具有正确的尺寸,则不会失败。

于 2013-03-19T17:53:26.010 回答
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 回答
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 超出第三个维度的维度是单例维度,这将认为它的大小不好……但这可能是可以接受的。

于 2013-03-20T00:03:11.660 回答