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