首页 > 解决方案 > 根据给定位置选择矩阵条目

问题描述

我有以下矩阵(MxN,其中 M ≤ N):

0.8147    0.9134    0.2785    0.9649
0.9058    0.6324    0.5469    0.1576
0.1270    0.0975    0.9575    0.9706

从每一行中,我想分别选择以下列条目(每行一个):

idx = [ 3  1  4 ];

这意味着我们将元素保留在 (1,3)、(2,1) 和 (3,4) 中,而数组的其余部分应该为零。

对于上面的示例,我将得到以下输出:

     0         0    0.2785         0
0.9058         0         0         0
     0         0         0    0.9706

我目前使用循环生成它,当矩阵大小较大时,它会变慢。

任何人都可以提出更高效的方法吗?

标签: matlabperformancematrixoptimizationmatrix-indexing

解决方案


您可以使用sub2ind函数将条目索引转换为线性索引。

使用线性索引时,matlab 将矩阵视为长列向量。

org_mat=[0.8147    0.9134    0.2785    0.9649
0.9058    0.6324    0.5469    0.1576
0.1270    0.0975    0.9575    0.9706];
entries=[3,1,4];

linear_entries=sub2ind(size(org_mat),1:length(entries),entries);
new_mat=zeros(size(org_mat));
new_mat(linear_entries)=org_mat(linear_entries);

推荐阅读