2013-12-09 48 views
0

我有一个二维数组,我想用MATLAB创建一维数组,以满足要求,即一维输出的每个元素都是由给定索引的值创建的二维数组。实施例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 

实施例确定的元素:

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 

我该如何实现它? 谢谢大家。

回答

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 
0

我不知道我理解你的问题,但我想你想在一个2×n矩阵应用功能

尝试

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

谢谢你的回答。为了便于理解,我编辑了它 – user3051460

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 
+0

非常感谢你 – user3051460

+3

@ user3051460没问题!如果这是你想要的,请接受。 :) – chappjc

相关问题