【问题标题】:How do I copy over values in a matrix that surpass a threshold and set the rest of the matrix to 0?如何复制矩阵中超过阈值的值并将矩阵的其余部分设置为 0?
【发布时间】:2015-12-26 01:52:46
【问题描述】:

在 MATLAB 中,我有一个 5 x5 矩阵,如下所示:

>> a = rand(5)

a =

    0.9356    0.9534    0.0282    0.4752    0.7735
    0.2701    0.4514    0.9733    0.8899    0.5671
    0.7472    0.7413    0.1240    0.9107    0.8378
    0.1031    0.6197    0.5289    0.0056    0.3798
    0.0409    0.6538    0.7813    0.4902    0.2815

我想保留那些超过阈值的值并将它们复制到一个新矩阵中,同时将其他值设置为 0。

这是我尝试过的。我尝试生成一个logical 矩阵,然后索引到矩阵中以选择我想要的值:

>> b=a>=0.30550

ans =

     1     1     0     1     1
     0     1     1     1     1
     1     1     0     1     1
     0     1     1     0     1
     0     1     1     1     0

>> a(b)

ans =

    0.9356
    0.7472
    0.9534
    0.4514
    0.7413
    0.6197
    0.6538
    0.9733
    0.5289
    0.7813
    0.4752
    0.8899
    0.9107
    0.4902
    0.7735
    0.5671
    0.8378
    0.3798

但是,这会产生一维向量。我怎样才能实现我想要的,使输出看起来像这样?

0.9356    0.9534    0         0.4752    0.7735
0         0.4514    0.9733    0.8899    0.5671
0.7472    0.7413    0         0.9107    0.8378
0         0.6197    0.5289    0         0.3798
0         0.6538    0.7813    0.4902    0

【问题讨论】:

  • 请在标签中提及并指定您使用的语言/框架。可以帮助的人更容易注意到您的问题
  • 对不起,先生,我正在使用 matlab 的目的

标签: arrays matlab matrix indexing


【解决方案1】:

之所以将输出作为一维向量,是因为在二维数组中使用逻辑索引并查看输出是什么时,输入逻辑索引中为真的元素被放置在单个列中,并且元素通过逐列遍历矩阵并搜索那些为真的值来填充。相应的位置被复制到一个向量中。

如果您希望在保持矩阵形状的同时复制值,则必须首先创建一个零输出数组,然后使用logical 索引将相关值复制到正确的位置:

b = zeros(size(a));
b(a >= 0.30550) = a(a >= 0.30550);

效果是这里的逻辑索引将允许表达式右侧的元素复制到左侧相应的相同空间位置,从而完成您所追求的。


示例运行

>> rng(123);
>> a = rand(5);
>> b = zeros(5);
>> b(a >= 0.30550) = a(a >= 0.30550);
>> a

a =

    0.6965    0.4231    0.3432    0.7380    0.6344
    0.2861    0.9808    0.7290    0.1825    0.8494
    0.2269    0.6848    0.4386    0.1755    0.7245
    0.5513    0.4809    0.0597    0.5316    0.6110
    0.7195    0.3921    0.3980    0.5318    0.7224

>> b

b =

    0.6965    0.4231    0.3432    0.7380    0.6344
         0    0.9808    0.7290         0    0.8494
         0    0.6848    0.4386         0    0.7245
    0.5513    0.4809         0    0.5316    0.6110
    0.7195    0.3921    0.3980    0.5318    0.7224

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多