如何解决使用putmask和保留顺序替换数组中的列值
|| 我有一个浮点数的numpy数组,我希望使用取决于要重新计算的列的公式来重新计算新值。 我最初尝试遍历各列,屏蔽要重新计算的列以外的数组,并用numpy.putmask将新值替换为新值,但这不会保留顺序,因为它尝试在每个值中放置一个值元素,并尝试在下一个元素àla上尝试下一个计算值时失败:>>> import numpy as np
>>> x = [[ 1.,2.],[ 3.,4.],[ 5.,6.],[ 7.,8.],[ 9.,10.]]
>>> mask = [[ True,False],[ True,False]]
>>> y = [ 21.,22.,23.,24.,25.]
>>> np.putmask(x,mask,y)
>>> print x
[[ 21. 2.]
[ 23. 4.]
[ 25. 6.]
[ 22. 8.]
[ 24. 10.]]
我需要一个解决方案,该解决方案将使用相同的值重试,直到找到True值为止,以使x看起来像:
[[ 21. 2.]
[ 22. 4.]
[ 23. 6.]
[ 24. 8.]
[ 25. 10.]]
欢迎任何解决方案或其他方法。谢谢。
解决方法
putmask(x,mask,y)
为每个n
设置x.flat[n] = y[n]
,其中mask.flat[n]
为真。
In [17]: list(x.flat)
Out[17]: [21.0,2.0,22.0,4.0,23.0,6.0,24.0,8.0,25.0,10.0]
In [18]: list(mask.flat)
Out[18]: [True,False,True,False]
由于ѭ7between在True
和False
之间交替,因此最终将x.flat
中的每个其他值都设置为y
中的其他值。
由于y
与size13ѭ的大小不同,因此重复y
中的值。这就是导致您在调用后在see13ѭ中看到的(不需要的)交替值的原因
putmask(x,y)
。
相反,如果您希望在mask
为True的情况下为x
分配新值,
那么您所需要做的就是分配numpy索引:
x[mask]=y
例如,
import numpy as np
x = np.array([[ 1.,2.],[ 3.,4.],[ 5.,6.],[ 7.,8.],[ 9.,10.]])
mask = np.array([[ True,False],[ True,False]])
y = np.array([ 21.,22.,23.,24.,25.])
x[mask]=y
print(x)
# [[ 21. 2.]
# [ 22. 4.]
# [ 23. 6.]
# [ 24. 8.]
# [ 25. 10.]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。