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

Arrays 如何在Matlab中比较多维数组?,arrays,matlab,multidimensional-array,Arrays,Matlab,Multidimensional Array,假设A和B是多维数组。维度的数量和大小是先验未知的 如何比较尺寸和相应元素的数量以确保它们相等(或接近双值)?要比较尺寸,可以比较size函数的输出。然后,一旦知道大小相同,就可以直接比较矩阵……首先将它们转换为一维向量,这样您只需要一个all命令。差不多 if (ndims(A) == ndims(B)) disp('They have the same number of dimensions!'); if all(size(A) == size(B))

假设
A
B
是多维数组。维度的数量和大小是先验未知的


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

要比较尺寸,可以比较
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

我会先比较尺寸:

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'); 
如果你想比较“亲密度”,那么你可以这样做

assert(all(abs(A(:) - B(:)) < thr), 'Some elements are not close');  
assert(all(abs(A(:)-B(:)

对于某些接近度阈值。

对于严格的值相等(当然还有尺寸),使用:

isequal(A,B)
如果
A
B
大小相同且内容值相等,则返回逻辑
1
true
);否则,它将返回逻辑
0
false

例如:

>> A = [1 2; 3 4];
>> B = [10 20 30];
>> equal = isequal(A,B)
equal =
     0
等效地,您可以评估三个条件:

  • 相同数量的尺寸
  • 每个尺寸上的尺寸相同,并且
  • 所有条目的值相同
  • 使用,使每个条件仅在满足前一个条件时进行计算:

    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);
    
    tol=1e-6;
    
    equal=ndims(A)==ndims(B)&&all(尺寸(A)==size(B))&&all(绝对尺寸A(:)-B(:)如果它们有不同的维数,您的第一次检查将抛出一个错误…很好。我编辑了示例代码以添加额外的检查。我不知道isequal,这很酷。这是一个比下面更完整的答案。我更喜欢
    isequaln
    而不是
    isequal
    ,因为我喜欢NaN==NaN来计算
    true