我有一个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
我该如何实施? 谢谢大家。
答案 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