假设A
和B
是多维数组。维度的数量和大小都是未知的。
如何比较尺寸和相应元素的数量以确保它们相等(或接近双值)?
答案 0 :(得分:4)
对于严格值的相等性(当然还有维度),请使用isequal
:
如果isequal(A,B)
和1
大小相同且内容的值相等,则
true
会返回逻辑A
(B
);否则,它返回逻辑0
(false
)。
示例:
>> A = [1 2; 3 4];
>> B = [10 20 30];
>> equal = isequal(A,B)
equal =
0
同样,您可以评估三个条件:
使用short-circuit "and",以便仅在满足前一个条件时才评估每个条件:
equal = ndims(A)==ndims(B) && all(size(A)==size(B)) && all(A(:)==B(:));
这允许推广最后一个条件以测试足够接近值:
tol = 1e-6;
equal = ndims(A)==ndims(B) && all(size(A)==size(B)) && all(abs(A(:)-B(:))<tol);
答案 1 :(得分:2)
我会首先比较尺寸:
assert(ndims(A) == ndims(B), 'Dimensions are not the same');
然后是尺寸
assert(all(size(A) == size(B)), 'Sizes are not the same');
然后比较元素
assert(all(A(:) == B(:)), 'Some elements are not the same');
如果您正在寻找比较&#34;亲密度&#34;,那么您可以
assert(all(abs(A(:) - B(:)) < thr), 'Some elements are not close');
接近一些阈值。
答案 2 :(得分:1)
要比较大小,您可以比较size
函数的输出。然后,一旦你知道尺寸是相同的,你可以直接比较矩阵......首先将它们变成一维向量,这样你只需要一个all
命令。像
if (ndims(A) == ndims(B))
disp('They have the same number of dimensions!');
if all(size(A) == size(B))
disp('They are the same size!']);
if all(A(:) == B(:))
disp(['They hold the same values!']);
end
end
end