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

时间:2014-11-05 03:34:45

标签: 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(L)

C =

     100
     500
     300
     100
     700
     300

我不希望它保留为单列。我想知道我能做些什么让C以这种矩阵格式返回给我?

C =

     100     300     0
     500     0       700
     0       100     300

非常感谢,伙计!!!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

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

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