【问题标题】:How to use logical values and select data in another matrix?如何使用逻辑值并在另一个矩阵中选择数据?
【发布时间】:2014-11-05 03:34:45
【问题描述】:

当我试图以矩阵格式取回数据时,我对 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

现在我有另一组矩阵样本,名为BC 是我希望看到的输出

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

非常感谢,伙计们!!!

【问题讨论】:

    标签: matlab matrix matrix-indexing


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇,它真的有效!我从来没有想过解决这个问题的替代方法。所以确实存在技术限制,但你真的很快很聪明地解决了这个问题!再次感谢!
    • 也许最好将排除的元素设置为NaN而不是0(这可能是B中的有效值)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      相关资源
      最近更新 更多