使用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自身。
直接修改arassign 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)。