Numpy用另一个数组的特定行和列替换一个数组的特定行和列

Som*_*hit 4 python arrays indexing numpy scipy

我试图替换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]]
Run Code Online (Sandbox Code Playgroud)

现在,基于一定的概率,我需要执行元素替换a的值b(例如,在生成随机数之后,r对于每个元素,在0和1之间,我将替换元素abif> 0> ).

我如何使用numpy/scipy在Python中以高性能执行此操作?

Wil*_*sem 5

随着掩蔽.我们首先生成一个具有相同尺寸的随机数矩阵,并检查它们是否大于0.8:

mask = np.random.random(a.shape) > 0.8
Run Code Online (Sandbox Code Playgroud)

现在,我们可以分配的值b这里maskTrue上对应的指标a:

a[mask] = b[mask]
Run Code Online (Sandbox Code Playgroud)

例如:

>>> 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.]])
Run Code Online (Sandbox Code Playgroud)

因此,在这些地方mask就是True(因为0.8是相当高的,我们预计平均2.4这样的值),我们分配相应的值b.