Matlab中用于单元数组元素的线性索引

3

考虑以下单元格数组:

A={1:3,[20,40],100}

A =

1×3 cell array

   {1×3 double}    {1×2 double}    {[100]}

我希望有一种方法来检索存储在中的值的线性索引,例如如果我使用以下方式展平数组:

[A{:}]

ans =

     1     2     3    20    40   100

我可以看到第四个线性索引是20,那么对于一个单元数组A((4)),是否有类似于矩阵线性索引的方法,可以在示例中给出值20?(当然,我只是发明了(())符号来说明问题。)


我认为修改subsref函数是一个好主意,我也喜欢新的运算符((.)) - Autonomous
请参见 https://dev59.com/WXA65IYBdhLWcg3wyh97。 - Nicky Mattsson
2个回答

5
据我所知,暂时没有直接的解决方案。以下是一种实现方法。即使内部数组不是行向量,这种方法也可以起作用;在这种情况下,它们会被隐式地视为线性化。
A = {1:3,[20,40],100}; % data
ind = 4; % linear index into flattened data
s = [0 cumsum(cellfun(@numel, A))];
ind_outer = find(ind<=s, 1) - 1;
ind_inner = ind - s(ind_outer);
result = A{ind_outer}(ind_inner);

0

如果您不想将单元格矩阵转换为直接数值矩阵,则很难确定特定矩阵中特定元素的线性索引,因为您不知道数据的“完整大小”。

您可以在单元格数组中检索矩阵的元素:

value = A{1,2}(1,1) % 20

这将获取第一行单元格中第二个单元格的基础值({1,2}),并检索第一行和第一列中的元素((1,1))。如果您愿意,可以重写命令,以便仅考虑单个维度:

value = A{2}(1) % 20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接