Matlab 如何使用逻辑值并在另一个矩阵中选择数据?
当我试图以矩阵格式获取数据时,我对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(
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
中的有效值)