使用布尔掩码有效地将 numpy 数组的元素归零 [英] Efficiently zero elements of numpy array using a boolean mask
本文介绍了使用布尔掩码有效地将 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屋!
查看全文