我们假设我有一个矩阵A
,其第一列是ID,另一个是B
,包含随机顺序的某些ID(其中一些可能会丢失等) )。
如何按A
给出的顺序选择匹配ID的B
行?
示例:
使用矩阵
A = [2, 0.4, 0.3;
9, 0.2, 0.8;
3, 0.3, 0.4;
5, 0.1, 0.5];
B = [9; 2; 5];
我想得到矩阵
C = [9, 0.2, 0.8;
2, 0.4, 0.3;
5, 0.1, 0.5];
答案 0 :(得分:4)
根据修订后的陈述问题,A
的第一列是IDs
而B
也包含某些IDs
,我们需要匹配A
' IDs
与B
&#{1}}一起,并从A
中选择匹配的行。基于这样的假设,你可以在这里采取一些方法。
方法#1 [使用ismember
]
[~,idx] = ismember(B,A(:,1))
C = A(idx,:)
方法#2 [使用bsxfun
]
[idx,~] = find(bsxfun(@eq,A(:,1),B'))
C = A(idx,:)
方法#3 [使用intersect
]
[~,~,idx] = intersect(B,A(:,1),'stable')
C = A(idx,:)
答案 1 :(得分:2)
如果您的ID 唯一,正整数,您可以执行以下操作:
方法#4 [使用sparse
和索引]
构造与映射对应的稀疏向量:ID -> rowIndex
并评估此向量:
indexOfID = sparse(A(:,1), 1, 1:size(A,1));
C = A(indexOfID(B),:);
如果您想多次查询ID,这可能会很有用,因为您只需要构建indexOfID
一次。
(我也喜欢“功能评估”indexOfID(B)
)