如何更改一定数量的 numpy 矩阵元素?

Pav*_*ich 2 python numpy

我有一个方形的 numpy 2D 矩阵。

2 2 2 2
2 2 2 2
2 2 2 2
2 2 2 2
Run Code Online (Sandbox Code Playgroud)

我需要将一定数量的随机矩阵值设置为 0。假设它是 5 个元素。这意味着必须将 16 个矩阵值中的任何 5 个设置为 0。例如,新矩阵可以是

2 2 0 0
0 2 2 2
2 2 2 2
0 2 0 2
Run Code Online (Sandbox Code Playgroud)

或者

2 0 2 2
2 2 0 2
2 2 0 2
0 2 2 0
Run Code Online (Sandbox Code Playgroud)

或其他一些。

我怎么能做到这种有效的方式?

Joh*_*nck 5

这将做到:

import random
arr1d = arr.ravel()
randidx = random.sample(range(len(arr1d)), 5)
arr1d[randidx] = 0
Run Code Online (Sandbox Code Playgroud)

这会修改arr因为ravel()返回一个视图,而不是一个副本。

有关如何生成随机数的更多信息,请参阅:numpy 中的非重复随机数