matlab - 选择一列中的值与特定向量匹配的行

标签 matlab indexing

首先我的问题看起来很简单,但我仍然找不到相关的答案。 所以我有大小为 mx4 的矩阵

a = [(2:6)' rand(5,3)]
a  =     
2.    0.1589990    0.2725595    0.2944531  
3.    0.0181815    0.3437655    0.5718074  
4.    0.4098371    0.2033702    0.2141770  
5.    0.0105835    0.3011945    0.6895462  
6.    0.1965310    0.2762596    0.5855573 

和大小为 mx1 的向量 b。 b 的元素总是可以在 a 的第一列中找到。例如:

b = [2;3;6]

我想要的是选择第一列中的值与 b 的值匹配的行,即

ans  = 
2.    0.1589990    0.2725595    0.2944531  
3.    0.0181815    0.3437655    0.5718074  
6.    0.1965310    0.2762596    0.5855573 

到目前为止,我所提供的只是这些解决方案:

Ans(1,:) = a(a(:,1)==b(1),:);
Ans(2,:) = a(a(:,1)==b(2),:);
Ans(3,:) = a(a(:,1)==b(3),:);

和稍微自动化的版本:

Ans = zeros(size(b,1),size(a,2));
for i = 1:size(b,1)
    Ans(i,:)=a(a(:,1)==b(i),:)
end 

有没有可能让它变得简单,可以在一行中或没有循环?

最佳答案

我认为ismember是你的 friend 吗:

a = [(2:6)' rand(5,3)]
b = [2;3;6]

a(ismember(a(:,1),b),:)
a =   
   2.000000   0.065121   0.172047   0.490842
   3.000000   0.585701   0.650922   0.260139
   4.000000   0.266305   0.543419   0.562515
   5.000000   0.760789   0.378180   0.560597
   6.000000   0.058769   0.926874   0.538872

b =   
   2
   3
   6

ans =    
   2.000000   0.065121   0.172047   0.490842
   3.000000   0.585701   0.650922   0.260139
   6.000000   0.058769   0.926874   0.538872

感谢 RTL 注意到 a(ismember(a,b),:) 可能匹配不在第一列中的元素。

关于matlab - 选择一列中的值与特定向量匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839508/

相关文章:

matlab - 神经网络优化与遗传算法

c# - 没有从列表中获得预期的索引

MySQL 不使用索引;使用文件排序

python - 如何选择值以 pandas 中的特定值开头和结尾的行?

mysql - 如何检查 MySQL 中列的索引

matlab - 如何在 MATLAB 中使用 TeX/LaTeX 格式设置自定义数据提示?

matlab - 在输入对话框中显示图形matlab

matlab - 在 MATLAB 中我应该通过哪些措施来设置我的高斯滤波器的大小?

matlab - 使用 MATLAB 更新图中的文本

Python数据帧索引-无法重新索引?