使用Numpy将一个数组的特定行和列替换为另一个数组的特定行和列。

4

我将尝试替换一个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]]

现在,基于一定的概率,我需要将a中的元素逐个替换为b的值(例如,在为每个元素生成一个介于0和1之间的随机数r后,如果r>0.8,则将a的元素替换为b的元素)。

我该如何使用Python中的numpy/scipy来高效地完成这个任务?

1个回答

5

使用掩码技术。首先,我们生成一个与之相同维度的矩阵,其中包含随机数,并检查这些数字是否大于0.8

mask = np.random.random(a.shape) > 0.8

现在我们可以将maskTrueb值分配给相应的a索引:
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.]])

所以这里当maskTrue时(由于0.8相当高,我们预计平均会有2.4个这样的值),我们给b赋上相应的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接