将值从一个numpy数组填充到另一个numpy数组中

时间:2015-02-26 16:04:29

标签: python arrays numpy

我在numpy数组中有一些数据,例如:

a = np.array([1,2,3,4,5,6,7,8,9,10])

然后我想要从这个数组中对一些值进行子集化,即:

b = a[a > 5]

这样:

b = np.array([6,7,8,9,10])
然后,我对这个子集进行了一些简单的计算,即:

c = b + 1

这样:

c = np.array([7,8,9,10,11])

然后我想用更新的值重新填充原始数组,以便最终得到:

d = np.array([1,2,3,4,5,7,8,9,10,11])

我的真实数据显然比这更多参与,所以我想避免仅通过索引原始数组中感兴趣的值来在一行中完成它(除非当然这是最简单的方法)。

我们非常感谢您提供的任何帮助,以便将数组c中的值填充回数组a以获取数组d

2 个答案:

答案 0 :(得分:3)

你可以写:

>>> a[a > 5] += 1
>>> a
array([ 1,  2,  3,  4,  5,  7,  8,  9, 10, 11])

+=修改数组。


要保存a > 5所在的索引数组,您可以根据EdChum的建议使用np.where(或等效np.nonzero):

>>> np.where(a > 5)
(array([5, 6, 7, 8, 9]),)

(这将返回索引数组的元组 - 每个维度为a一个。)

答案 1 :(得分:1)

您可以使用np.where

In [55]:

np.where(a > 5, a + 1, a)
Out[55]:
array([ 1,  2,  3,  4,  5,  7,  8,  9, 10, 11])

第一个参数是布尔条件,第二个参数是条件为真的返回值,第三个参数是返回值,如果为假。

如果你想生成一个新的数组,那么你可以使用你要修改的数组的副本而不是存储布尔掩码:

In [56]:

a = np.array([1,2,3,4,5,6,7,8,9,10])
b = a > 5
b
Out[56]:
array([False, False, False, False, False,  True,  True,  True,  True,  True], dtype=bool)

In [57]:

d = np.where(b, a + 1, a)
d
Out[57]:
array([ 1,  2,  3,  4,  5,  7,  8,  9, 10, 11])

原始数组未受影响

In [58]:

a
Out[58]:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

如果您想要索引值,可以使用np.nonzero

In [84]:

np.nonzero(b)
Out[84]:
(array([5, 6, 7, 8, 9], dtype=int64),)