按第一列的值选择矩阵行

时间:2014-12-21 09:18:00

标签: matlab select matrix

我们假设我有一个矩阵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];

2 个答案:

答案 0 :(得分:4)

根据修订后的陈述问题,A的第一列是IDsB也包含某些IDs,我们需要匹配A ' IDsB&#{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)

的语法