用numpy.random.normal替换数组中的值

时间:2014-03-21 10:48:52

标签: python arrays numpy

我有以下数组:

myArray1 = np.array([[255, 255, 255,   1,   1, 255, 255, 255],
                     [255,   1,   1,   1,   1,   1, 255, 255]])

我想基于myArray2创建一个新的数组myArray1。如果myArray1的值为1,我想将值替换为numpy.random.normal(loc=40, scale=10)。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果您的阵列被称为a,则可以执行

b = a == 1
a[b] = numpy.random.normal(loc=40, scale=10, size=b.sum())

这可以避免Python循环并利用Numpy的性能。

第一行创建一个布尔数组,其形状与a相同,在True的所有条目中都是a。第二行使用advanced indexing with this Boolean array仅将新值分配给bTrue的地方。

答案 1 :(得分:1)

list comprehension这样怎么样:

[i if i != 1 else numpy.random.normal(loc=40, scale=10) for j in myArray1 for i in j]

j遍历每行myArray1i循环遍历行的每个元素。