我有一个单元格数组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本能仍然接近于零.)
测试每个细胞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)