0

假设我们有一个 100*4 的数组。

我们还有一个 1 和 0 的 100*1 数组。假设有 n 个 1。

我们想从 100*4 数组创建一个*4 数组,其中我们只包含第二个数组为 1 的列。

一种方法是通过双 for 循环。有没有更简单的方法?

所以,我们有

A = [ [ 332 44 33 22 33 55 33 211 .....
      [ 823 44 12 98 19 23 32 911 .....
      ....
      ....
    ]

 B = [1 0 0 1 0 0 0 ....]

我们想要

 C = [ [ 332 22 ...
       [ 823 98 ...
       ....
       ....
     ]
4

2 回答 2

4

您应该使用逻辑索引

C = A(:, B==1 );
于 2013-06-20T20:14:47.863 回答
1

首先repmat是逻辑向量,使其具有与矩阵完全相同的大小A

idx2keep = repmat(b, [1 4]); % Or [4 1] depending on if it's a col or row vector

然后你可以简单地索引它们

 B = A( idx2keep )

然后你可以把它变成一个列向量:

 B = B(:)

那应该做的工作。下次请务必发布一些代码或符号,以便更容易和更清楚地回答这个问题。

于 2013-06-20T18:53:20.350 回答