使用布尔掩码有效地将 numpy 数组的元素归零 [英] Efficiently zero elements of numpy array using a boolean mask

查看:40
本文介绍了使用布尔掩码有效地将 numpy 数组的元素归零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我创建了一个超慢版本:

So I have created a super-slow version:

arr = np.arange(3*9).reshape((3, 9))
print(arr)
to_black = np.random.choice(a=[False, True], size=9)
for i, j in enumerate(arr):
  for k, e in enumerate(j):
    if to_black[k]:
      arr[i,k] = 0
print(arr)

输出这个:

[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]]
[[ 0  0  2  0  0  5  6  0  8]
 [ 0  0 11  0  0 14 15  0 17]
 [ 0  0 20  0  0 23 24  0 26]]

现在我想知道如何在 CPU 性能方面做得更快?

Now I wonder how one would do it faster in terms of CPU performance?

推荐答案

您为 numpy 选择了一个简单的方案.

You picked an easy one for numpy.

timr@tims-gram:~/src$ cat x.py
import numpy as np
arr = np.arange(3*9).reshape((3, 9))
print(arr)
to_black = np.random.choice(a=[False, True], size=9)
arr[:,to_black] = 0
print(arr)
timr@tims-gram:~/src$ python x.py
[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]]
[[ 0  0  0  0  4  5  6  0  8]
 [ 9  0  0  0 13 14 15  0 17]
 [18  0  0  0 22 23 24  0 26]]
timr@tims-gram:~/src$ 

这篇关于使用布尔掩码有效地将 numpy 数组的元素归零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆