python - Numpy:更改所有矩阵元素 10% 的最快方法

标签 python performance numpy

我有一个大小为 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/

相关文章:

performance - Docker容器CPU使用率监控

Python 多处理负载均衡器

python - 如何在Python中解压结构体?

python - OpenCV - 部分图像匹配

python - 使用递归的列表列表

python计算序列列表中子字符串的存在和不存在的数量

python - 当元组中每个位置的值来自不同的列表时,从元组序列创建值索引数组

python - 如何对列求和以在特定行上创建第三个列?

performance - 如何在不使用 Web 仪表板的情况下分析 Apache Storm 拓扑?

python - 如何使用 Python 确定机器在给定所有位置数据的情况下移动的方向?