如何在矩阵中找到向量的元素并进行排列?

时间:2013-10-29 14:49:27

标签: matlab

有两种结构,即矩阵A(m×8)和矢量B(n×1),它们是唯一的。 B的所有元素都在A中,但A中的每一行都有4个随机排列的B元素。问题是:我想在A的每一行中找到并找到B的4个元素,并将这4个元素移动到矩阵A的大部分左侧或存储在新的矩阵中C.如何快速完成。

进一步解释,

          Matrix A =[1 3 10 5 2 20 30 35]
                    [2 4 25 35 1 5 12 13]
                    .
                    .
          Vector B = 1:9. Hence A has [1 3 5 2] and [2 4 1 5] of B in its first and second row. I want to locate those elements of B in
A and rearrange A or store anew like,
                     A=[1 3 5 2 10 20 30 35]
                       [2 4 1 5 25 35 12 13]
                          (or)
                       C=[1 3 5 2]
                         [2 4 1 5]

我尝试使用

查找并找到这些元素
[I,J]=ismember(A,B)

并且不知道如何继续进行。

2 个答案:

答案 0 :(得分:2)

我认为这可以满足您的需求:

At = A.'; 
[I,J]=ismember(At,B);
C = reshape(At(I(:)),[],size(At,2)).'
D = [C reshape(At(~I(:)),[],size(At,2)).'];

您想要的结果是CD

示例:

>> A =
       1     3     4     5     7     6     8
       9     3     1     5     2     6     9

>> B =
       1     2     3     4     5

>> C =
       1     3     4     5
       3     1     5     2

>> D
       1     3     4     5     7     6     8
       3     1     5     2     9     6     9

答案 1 :(得分:1)

我认为可以通过单一的重塑完成并且像这样成员:

AT = A';
C = reshape(AT(ismember(AT,B)),4,[])

示例:

假设您的AB看起来像您描述的那样,那么您可以应用解决方案:

A = [1 3 10 5 2 20 30 35
     2 4 25 35 1 5 12 13];
B = 1:9;

AT = A';
C = reshape(AT(ismember(AT,B)),4,[])'

会给:

C =

     1     3     5     2
     2     4     1     5