如何在Matlab中比较多维数组?

时间:2015-01-04 18:52:11

标签: arrays matlab multidimensional-array

假设AB是多维数组。维度的数量和大小都是未知的。

如何比较尺寸和相应元素的数量以确保它们相等(或接近双值)?

3 个答案:

答案 0 :(得分:4)

对于严格值的相等性(当然还有维度),请使用isequal

  如果isequal(A,B)1大小相同且内容的值相等,则

true会返回逻辑AB);否则,它返回逻辑0false)。

示例:

>> A = [1 2; 3 4];
>> B = [10 20 30];
>> equal = isequal(A,B)
equal =
     0

同样,您可以评估三个条件:

  1. 相同数量的维度,
  2. 每个维度的大小相同,
  3. 所有条目的相同值
  4. 使用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