Matlab 如何使用逻辑值并在另一个矩阵中选择数据?

Matlab 如何使用逻辑值并在另一个矩阵中选择数据?,matlab,matrix,matrix-indexing,Matlab,Matrix,Matrix Indexing,当我试图以矩阵格式获取数据时,我对MATLAB感到失望。但每次我都只得到一列的答案。我将举例说明我的问题: 比如说, A = [1 -3 2;5 4 7;-8 1 3]; L = logical(mod(A,2)) L = 1 1 0 1 0 1 0 1 1 现在我有另一组矩阵样本,名为B,C是我想要看到的输出 B = [100 300 200;500 400 700;800 100 300]; C = B(

当我试图以矩阵格式获取数据时,我对MATLAB感到失望。但每次我都只得到一列的答案。我将举例说明我的问题:

比如说,

A = [1 -3 2;5 4 7;-8 1 3];

L = logical(mod(A,2))

L =

     1     1     0
     1     0     1
     0     1     1
现在我有另一组矩阵样本,名为
B
C
是我想要看到的输出

B = [100 300 200;500 400 700;800 100 300];

C = B(L)

C =

     100
     500
     300
     100
     700
     300
我不想让它成为一个单独的专栏。我想知道我能做些什么使
C
以这种矩阵格式返回给我

C =

     100     300     0
     500     0       700
     0       100     300

非常感谢,伙计们

逻辑索引将仅从逻辑矩阵为真的矩阵中选择元素。显然,这意味着它无法保留其原始形状,因为元素的数量将发生变化。有几种方法可以做你想做的事情;最有效的可能是:

C = B;
C(~L) = 0;

这将
C
设置为
B
,然后将矩阵中
L
为假的每个元素设置为零

或者您可以从空白矩阵开始设置所需元素:

C = NaN(size(B),'like',B);  % or zeros(size(B),'like',B)
C(L) = B(L);

哇,真管用!我从来没有想到过解决这个问题的另一种方法。因此,确实存在技术限制,但你真的很快和聪明地解决了这个问题!再次感谢!也许最好将排除的元素设置为
NaN
而不是
0
(这可能是
B
中的有效值)