我想知道以下最佳做法:
我有两个矩阵,a1
(500乘40)和a2
(1乘500)。对于a1
,它是布尔值,我想根据特定列中的值(即true或false)分离出数组。我还需要将a2
中的相应条目分开。
我可以用几个循环来完成这个,或者甚至可以通过连接a1
和a2
,进行逻辑测试然后再将它们分开,但是想知道是否有一个常用的方法对于这样的事情?
答案 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