如果我有一个Cell数组2 * 2,其中A {i,j}是一个矩阵,我有两个向量v = 1:2,c = 1:2。
我希望A(v,c)只返回A {1,1}和A {2,2},但matlab返回两者的每个组合(也称为返回A {1,2}和A {2, 1})。
有没有办法不使用循环或cellfun?
答案 0 :(得分:1)
我怀疑你在做什么是这样的:
B = A(v, c);
当您指定要转换为A
的矢量时,它会找到交点坐标并为您提供这些元素。因此,通过索引,您基本上可以返回A
中的所有元素。
如果您只想要左上角和右下角的元素,请改用sub2ind
。您可以获取单元格数组中这些位置的列主要索引,然后使用这些索引切入您的单元格数组:
ind = sub2ind(size(A), v, c);
B = A(ind);
让我们创建一个样本2 x 2单元格数组:
A = cell(2,2);
A{1,1} = ones(2);
A{1,2} = 2*ones(2);
A{2,1} = 3*ones(2);
A{2,2} = 4*ones(2);
第1行,第1列是所有1的2 x 2矩阵。第1行第2列是2s的2 x 2矩阵,第2行第1列是所有3s的2 x 2矩阵,最后一个是所有4s的2 x 2矩阵。
使用v = 1:2; c=1:2;
,运行上面的代码会给我们:
>> celldisp(B)
B{1} =
1 1
1 1
B{2} =
4 4
4 4
如您所见,我们准确地选出了左上角和右下角的条目。
如果它只是一个2 x 2的单元格数组,而你只想挑选左上角和右下角的元素,你可以这样做:
B = A([1 4]);
sub2ind
等效地返回1和4作为左上角和右下角元素的列主要索引。这样可以避免sub2ind
调用,但仍能达到您想要的效果。