考虑以下单元格数组:
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
这个例子? (我当然为了说明目的而发明了(())
符号。
答案 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