使用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']arar['foo']ar
ここでは、インデックスの順序が重要であることに注意してください。'foo'次のように、フィールドを選択する前にブール値マスクを適用しようとした場合:
ar[mask]['foo'] = 99
は のコピーであるため、これは影響しません。コピー ( ) に対して何も行われても、元の ( ) には影響しません。arar[mask]arar[mask]ar