2

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

我尝试了一个简单的

A(1,B){2,2}

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

4

3 回答 3

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))
于 2013-08-22T13:20:13.200 回答
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}}))

这听起来更像您正在做的事情(并且不使用cellfunand arrayfun,如果您在循环上执行此操作会更好,因为它们很

请参阅此处subsref的文档。

更长的路径是:

temp = [A{1,B}]
temp{2,2}
于 2013-08-22T13:42:27.613 回答
2

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

于 2013-08-22T13:20:04.810 回答