我正在尝试替换 Numpy 数组的特定行和列,如下所示。
数组a和b的值初始如下:
a = [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
b = [[2 3 4 5]
[6 7 8 9]
[0 2 3 4]]
现在,基于一定的概率,我需要用 b
的值对 a
执行逐元素替换(比如,在生成随机数后, r
,每个元素都在 0 到 1 之间,如果 r > 0.8,我会将 a
的元素替换为 b
的元素。
我如何使用 numpy/scipy 在 Python 中以高性能执行此操作?
最佳答案
带有掩蔽。我们首先生成一个具有相同维度的随机数矩阵,并检查它们是否大于 0.8
:
mask = np.random.random(a.shape) > 0.8
现在我们可以将 b
的值分配给 a
的相应索引,其中 mask
为 True
:
a[mask] = b[mask]
例如:
>>> a
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
>>> b
array([[2, 3, 4, 5],
[6, 7, 8, 9],
[0, 2, 3, 4]])
>>> mask = np.random.random(a.shape) > 0.8
>>> mask
array([[ True, False, False, False],
[ True, False, False, False],
[False, False, False, False]])
>>> a[mask] = b[mask]
>>> a
array([[2., 1., 1., 1.],
[6., 1., 1., 1.],
[1., 1., 1., 1.]])
所以在这里 mask
为 True
(因为 0.8
相当高,我们预计平均有 2.4 个这样的值),我们分配b
的对应值。
关于python - Numpy 用另一个数组的特定行和列替换一个数组的特定行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775532/