如何根据其中一个矩阵中的值从两个矩阵中提取值?

时间:2010-02-07 23:07:26

标签: arrays matlab matrix indexing

我想知道以下最佳做法:

我有两个矩阵,a1(500乘40)和a2(1乘500)。对于a1,它是布尔值,我想根据特定列中的值(即true或false)分离出数组。我还需要将a2中的相应条目分开。

我可以用几个循环来完成这个,或者甚至可以通过连接a1a2,进行逻辑测试然后再将它们分开,但是想知道是否有一个常用的方法对于这样的事情?

2 个答案:

答案 0 :(得分:4)

这是猜测,但听起来像是a1中每列中的真实条目,您要在a2中提取相应的值。既然您说a1是一个布尔值(在MATLAB中称为logical类型),您可以通过以下方式使用logical indexing

vals1 = a2(a1(:,1));  %# Use column 1 of a1 as an index into a2
vals5 = a2(a1(:,5));  %# Use column 5 of a1 as an index into a2
...

以下是一个例子:

>> a1 = logical(randi([0 1],10,4))  %# Make a random logical matrix

a1 =

     0     0     1     1
     0     1     0     0
     1     1     1     1
     1     0     1     0
     0     0     1     1
     0     0     1     0
     0     1     1     0
     1     0     0     0
     1     1     0     1
     1     0     0     0

>> a2 = 1:10;
>> a2(a1(:,1))  %# Get the values in a2 corresponding
                %#    to the ones in column 1 of a1

ans =

     3     4     8     9    10

>> a2(a1(:,2))  %# Get the values in a2 corresponding
                %#    to the ones in column 2 of a1

ans =

     2     3     7     9

答案 1 :(得分:0)

newval=a1(:,5); %equals to the 5th column