如何检查单元格数组中的所有条目是否具有相同的大小?

kjo*_*kjo 5 matlab

我有一个单元格数组C,其元素是n维数字数组.例如:

C = {[111 121 131; 211 221 231], ...
     [112 122 132; 212 222 232], ...
     [113 123 133; 213 223 233], ...
     [114 124 134; 214 224 234]};
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方便的方法来测试它们所有的nd阵列C是否具有相同的形状(由size函数报告).

这里的平等标准并非完全无足轻重.根据情况,人们可能希望看到[2 3 4]不同于或等于形状的形状,例如,[1 2 3 4][2 1 3 1 4].

为了我的直接目的,我希望[2 3 4]与...不同[1 2 3 4].

(顺便说一下:订单总是重要的;例如,[2 3 4]永远不等于[4 3 2],比方说.)

我尝试了几件事(比如,获得长度unique(C)),但它们都失败了......(经过近两年的使用,我的MATLAB本能仍然接近于零.)

Lui*_*ndo 6

测试每个细胞C的大小与一个细胞的大小,例如第一个细胞的大小.为了测试你需要的尺寸相等isequal(==不会这样做,因为尺寸的大小可能不同).

all(cellfun(@(e) isequal(size(C{1}), size(e)) , C(2:end)))
Run Code Online (Sandbox Code Playgroud)

如果你想考虑大小[2 3 4]等于[1 2 3 4]etc,只需添加squeeze:

size1 = size(squeeze(C{1}));
all(cellfun(@(e) isequal(size1, squeeze(size(e))) , C(2:end)))
Run Code Online (Sandbox Code Playgroud)