如何从二维数组中获取数据并放入一维数组中

时间:2013-12-09 05:36:15

标签: matlab matrix indexing

我有一个2D数组,我想通过MATLAB创建一个1D,满足1D输出的每个元素由2D阵列中给定索引的值创建的要求。示例2D数组是

A=[2 4 6; 1 9 7.3 4 5]

1D数组的索引

X=[1;2;3]
Y=[1;2;3]

我想将1D数组存储为由

确定的元素
 B=A(x,y) % x,y are index in X and Y matrix

构建1D阵列的示例:

X=[1;2;3]
Y=[1;2;3]

 B=[A(1,1);A(2,2);A(3,3)]=[2; 9; 5]

这是我的代码

B=zeros(1,length(A));
B=A(...)  %I don't know it

我该如何实施? 谢谢大家。

3 个答案:

答案 0 :(得分:3)

您正在寻找sub2ind

A=[2 4 6; 1 9 7; 3 4 5]
X=[1;2;3]; Y=[1;2;3];
B = A(sub2ind(size(A),X,Y))

B =

     2
     9
     5

答案 1 :(得分:0)

您可以使用cellfun来执行此操作。您可以按列将A转换为单元格,并为单元格的每个元素执行f

 A=[2 4 6; 1 2 7];

 % some example f funcion that just adds the col_index_A and row_index_A
 f = @(col_index_A, row_index_A) col_index_A + row_index_A; 

 % execute f with parameters that come from each column of A
 B = cellfun(@(c) f(c(1), c(2)), num2cell(A, 1));

 B =

     3     6    13

答案 2 :(得分:0)

我不确定我理解你的问题,但我认为你想在2×n矩阵上应用函数

尝试

for pos=1:size(a,2)
  b(pos) = f(a(:,pos));
end