1

有两个构造,即矩阵 A(mx 8) 和向量 B(nx 1),这是唯一的。B 的所有元素都在 A 中,但 A 中的每一行都有来自 B 的 4 个元素随机排列。问题是:我想在 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)

并且不知道如何进一步进行。

4

2 回答 2

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
于 2013-10-29T15:03:42.777 回答
1

我认为可以通过一次 reshape 和 ismember 来完成,如下所示:

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
于 2013-10-30T10:09:45.390 回答