为什么我的面具在Python中失败?

时间:2015-06-15 11:08:52

标签: python numpy

我的代码:

#!/usr/bin/python

import numpy as np

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4) + 0.8

print (data)

mask2= ((names != 'Joe') == 7.0)
d2 = data[mask2]
print (d2)

d3 = data[names != 'Joe'] = 7.0
print (d3)

实际上,我的意图是使用蒙版和其他表达来获得相同的解决方案。 我用Patric的帮助解决了这个问题

mask2= (names != 'Joe')
data[mask2] = 7.0
print (data)

然后我有:

[[ 7.          7.          7.          7.        ]
 [-0.73168514  2.26996071 -0.24892468  1.31421193]
 [ 7.          7.          7.          7.        ]
 [ 7.          7.          7.          7.        ]
 [ 7.          7.          7.          7.        ]
 [ 0.74771766  2.44888399  0.62641731 -0.12963696]
 [ 0.08604169  2.25468039  2.1960925   0.88218726]]

2 个答案:

答案 0 :(得分:2)

  

mask2 =((names!='Joe')== 7.0)

     

为什么我的面具在Python中失败了?

此掩码没有意义,使用该表达式,您将names != 'Joe'的结果与7.0进行比较

In [13]: names != 'Joe'
Out[13]: array([ True, False,  True,  True,  True, False, False], dtype=bool)

所以这很自然地会让你到处都是False

In [14]: ((names != 'Joe') == 7.0)
Out[14]: array([False, False, False, False, False, False, False], dtype=bool)

你的另一个面具是有意义的,这种形式的东西:

x[mask] = value

答案 1 :(得分:1)

不确定理解,但如果你想在除Joe之外的所有行中使用7.0,那么你想要的可能是:

data[names != 'Joe'] = 7.0
print data