我想用putmask替换NumpyArray中的值,只在一列中,只在几个选定的行上。我希望对要修改的数组以及使用的掩码使用索引。因此我创造了一个nd阵列,一个掩码和所需替换的数组。具体如下:
import numpy as np
a = np.linspace(1,30,30)
a.shape(10,3)
mask = np.random.randint(2, size=8)
replacements = a[[2,4,5,6,7,8],0]*a[[2,4,5,6,7,8],1]
a
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.],
[13., 14., 15.],
[16., 17., 18.],
[19., 20., 21.],
[22., 23., 24.],
[25., 26., 27.],
[28., 29., 30.]])
mask
array([0, 1, 0, 0, 1, 0, 1, 1])
replacements
array([ 56., 182., 272., 380., 506., 650.])
np.putmask(a[[2,4,5,6,7,8],2], mask[2::], replacements)
我的预期结果如下:
a
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.],
[13., 14., 15.],
[16., 17., 272.],
[19., 20., 21.],
[22., 23., 506.],
[25., 26., 650.],
[28., 29., 30.]])
但我得到的却是:
a
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.],
[13., 14., 15.],
[16., 17., 18.],
[19., 20., 21.],
[22., 23., 24.],
[25., 26., 27.],
[28., 29., 30.]])
有人有主意吗?你知道吗
请注意,您使用的是奇特的索引,因此在使用^{} 时,您修改的是
copy
,而不是sliced view,因此原始数组保持不变。您可以通过尝试使用切片表示法来检查这一点,例如np.putmask(a[2:8,2], mask[2::], replacements)
,在本例中,将修改a
中的值。你知道吗您可以使用^{} 并将值重新分配给
a
中相应的索引:输出
相关问题 更多 >
编程相关推荐