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

时间:2018-06-09 14:54:33

标签: python arrays numpy indexing 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]]

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

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

1 个答案:

答案 0 :(得分:5)

使用屏蔽。我们首先生成一个具有相同维度的随机数矩阵,并检查它们是否大于Doc

0.8

现在,我们可以将mask = np.random.random(a.shape) > 0.8 b mask的值分配给True的相应索引:

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.]]) mask(因为True相当高,我们平均预计会有2.4个这样的值),我们会指定相应的0.8值。