首先我的问题看起来很简单,但我仍然找不到相关的答案。 所以我有大小为 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/