使用ar['foo'][ar['bar'] == 0]
:
ar = np.array([(760., 0), (760.3, 0), (760.5, 0), (280.0, 1), (320.0, 1), (290.0, 1)], dtype=[('foo', 'f4'),('bar', 'i4')])
print(ar['bar'] == 0)
# array([ True, True, True, False, False, False], dtype=bool)
result = ar['foo'][ar['bar'] == 0]
print(result)
# array([ 760. , 760.29998779, 760.5 ], dtype=float32)
请注意,由于使用了布尔选择掩码,ar['bar'] == 0
, 是result
的部分副本ar['foo']
。因此,修改result
不会影响ar
自身。
直接修改ar
assign to ar['foo'][mask]
:
mask = (ar['bar'] == 0)
ar['foo'][mask] = 100
print(ar)
# array([(100.0, 0), (100.0, 0), (100.0, 0), (280.0, 1), (320.0, 1), (290.0, 1)],
# dtype=[('foo', '<f4'), ('bar', '<i4')])
分配ar['foo'][mask]
给ar['foo'].__setitem__
影响ar['foo']
. 既然ar['foo']
是观点,ar
修改ar['foo']
影响ar
。
请注意,索引的顺序在这里很重要。如果您在选择'foo'
字段之前尝试应用布尔掩码,如下所示:
ar[mask]['foo'] = 99
那么这个就不影响了,ar
既然ar[mask]
是副本。ar
对副本 ( ) 所做的任何操作都不会ar[mask]
影响原件 ( ar
)。