访问预定义的单元格元素

时间:2013-08-22 13:07:24

标签: matlab cell-array matrix-indexing

我有一个单元阵列A [1x80],其中每个元素都是一个单元阵列本身[9x2]。 我还有一个向量B代表一组选定的A单元格,我想提取每个选定单元格的元素{2,2}。

我尝试了一个简单的

  

A(1,B){2,2}

但当然它不起作用.... 你能救我吗?

3 个答案:

答案 0 :(得分:3)

这个怎么样:

A = {{1 2; 3 4}, {5 6;7 8}, {9 0; 1 2}; {3 4; 5 6}, {7 8; 9 0}, {11 22; 33 44}};
B = [2,3]

[cellfun(@(x)x(2,2), A){1, B}]

ans =

   8   2

修改

以上实际上只适用于八度音阶。正如@Amro指出的那样,要将其修改为在Matlab中工作,您需要使用临时变量:

temp = cellfun(@(x)x(2,2), A);
[temp{1, B}]

或在一个班轮(也感谢@Amro)

cellfun(@(c)c{2,2}, A(1,B))

答案 1 :(得分:2)

arrayfun(@(x) A{1,x}{2,2}, B)如何? 或者(感谢@Amro)cellfun(@(c)c{2,2}, A(1,B))

答案 2 :(得分:2)

这个答案与@ Dan的相同,但如果需要,可以使用简单的for循环来提高性能。

% If you know that the numel of elements returned by {2,2} will always be one:
nElem = numel(B);
ret(1,nElem)=0;

for k=1:nElem

  ret(k) = A{1,B(k)}{2,2}

end

以下答案是错误的,它只返回来自B的第一个元素的{2,2}索引

subsref([A{1,B}],struct('type','{}','subs',{{2,2}}))

这听起来更像你正在做的事情(并且不使用cellfunarrayfun,如果你在循环上执行此操作会更好,因为它们是{{3} })

请参阅subsref文档slow

更长的路径是:

temp = [A{1,B}]
temp{2,2}