微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用putmask和保留顺序替换数组中的列值

如何解决使用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 举报,一经查实,本站将立刻删除。