在MATLAB中,数组的第i个元素由(i)访问,而单元的第i个元素由{i}访问。因此,我的代码必须根据a是否是单元格来做不同的事情。
有更好的方法吗?所以我们可以在'相同'中访问第i个元素?方式。
答案 0 :(得分:3)
您可以以相同的方式a(i)
访问任何数组的 i 元素,并且行为完全一致:您获得与{{相同的类的对象1}}。因此,如果a
是5x5 a
数组,则double
是1x1双精度数。同样,如果a(i)
是一个单元格数组,则a
是一个1x1单元格。到目前为止,如此合乎逻辑且一致。
现在,如果你想在一个单元格中查看,你可以使用a(i)
但这是一个根本不同的操作。你的问题似乎暗示它会更好"如果这两个根本不同的操作具有相同的语法。它不会:如果是这种情况,那么将单元格数组切割成任意形状(包括1x1)的能力将会被黯然失色。
但您总是可以编写自定义函数。在我随身携带的许多Matlab解决方法中,我有以下一对功能:
a{i}
和
function a = ascell(a)
if ~iscell(a), a = {a}; end
在您的路径function a = uncell(a)
if iscell(a) & numel(a) == 1, a = a{1}; end
上,uncell.m
将为您提供b = uncell(a(i));
的 i 元素,其中包含细胞包装(如果有的话)。< / p>
最好在代码中看到a
的可见内容,因为它会提醒您(或其他维护者)uncell
可能合法地成为单元格或非细胞 - 在每个人的编码策略中,这绝不是必然的。在解释含义并正确处理预期非细胞的细胞阵列时,我的代码也不一定遵循与您相同的惯例,或者预期细胞的非细胞(这是解释为什么没有通用语法的另一种方式)。这引出了一个问题:如果你的应用程序的设计是这样的a
本质上可能包含具有不匹配形状或类型的元素,那么为什么不简单地宣称它总是一个单元格,而不是非单元格,并始终以a
?