我有一个单元阵列A [1x80],其中每个元素都是一个单元阵列本身[9x2]。 我还有一个向量B代表一组选定的A单元格,我想提取每个选定单元格的元素{2,2}。
我尝试了一个简单的
A(1,B){2,2}
但当然它不起作用.... 你能救我吗?
答案 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}}))
这听起来更像你正在做的事情(并且不使用cellfun
和arrayfun
,如果你在循环上执行此操作会更好,因为它们是{{3} })
请参阅subsref
文档slow。
更长的路径是:
temp = [A{1,B}]
temp{2,2}