使用布尔掩码有效地将numpy数组的元素归零

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

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 性能方面做得更快?

回答

你为 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数组的元素归零的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>