如何以统一的方式访问数组/单元格元素

时间:2017-01-05 01:08:17

标签: matlab

在MATLAB中,数组的第i个元素由(i)​​访问,而单元的第i个元素由{i}访问。因此,我的代码必须根据a是否是单元格来做不同的事情。

有更好的方法吗?所以我们可以在'相同'中访问第i个元素?方式。

1 个答案:

答案 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

的形式访问 i 元素