matlab中单元格数组元素的线性索引

时间:2018-03-14 22:14:46

标签: matlab indexing cell

考虑以下单元格数组:

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

我可以看到第4个线性索引是20等。所以有一种方法类似于矩阵线性索引,它将为我提供一个单元格数组A((4))的值20这个例子? (我当然为了说明目的而发明了(())符号。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

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

获取第一行单元格({1,2})中第二个单元格的基础值,并检索第一行和第一行((1,1))中的元素。如果需要,可以重写命令,使其仅考虑单个维度:

value = A{2}(1) % 20