我正在尝试替换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中以高性能执行此操作?
答案 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
值。