我有一个大小为 m x n
的矩阵 M
。目前,如果我想更改流程中所有矩阵元素的 10%,我会执行以下操作:
M = np.ones((m, n))
for _ in range(999999999):
M = M + (np.random.random(M.shape) < 0.1) * np.random.random(M.shape)
# do stuff with M
然而,对于大型矩阵来说,这种方法的多次迭代速度确实很慢,并且需要 m*n
个随机数,而我实际上只需要 0.1*m*n
。
如何更快地执行上述操作?
最佳答案
如果您的用例可以容忍大约 10% 的值,则可以使用随机索引更改值:
import numpy as np
a = np.ones((10,10))
a[np.random.rand(*a.shape)>=0.9] = 0.
a
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[0., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 0., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 0., 0., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 0., 1., 1., 0., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 0., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 0., 1.]])
如您所见,您将获得大约 10 个值的更改。
关于python - Numpy:更改所有矩阵元素 10% 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340039/