通常、Numpy 配列を含む比較式でPython ブール演算子 ( not
、and
、 )を使用しようとすると、このエラー メッセージが表示されます。or
>>> x = np.arange(-5, 5)
>>> (x > -2) and (x < 2)
Traceback (most recent call last):
File "<ipython-input-6-475a0a26e11c>", line 1, in <module>
(x > -2) and (x < 2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
これは、このような比較は、Python の他の比較とは対照的に、単一のブール値ではなくブール値の配列を作成するためです (ただし、既にご存知かもしれません)。
>>> x > -2
array([False, False, False, False, True, True, True, True, True, True], dtype=bool)
>>> x < 2
array([ True, True, True, True, True, True, True, False, False, False], dtype=bool)
問題の解決策の一部は、おそらく に置き換える必要がありますand
。np.logical_and
これは、 AND 演算を の 2 つの配列にブロードキャストしますnp.bool
。
>>> np.logical_and(x > -2, x < 2)
array([False, False, False, False, True, True, True, False, False, False], dtype=bool)
>>> x[np.logical_and(x > -2, x < 2)]
array([-1, 0, 1])
ただし、そのようなブール値の配列は、通常の Python リストへのインデックス付けには使用できないため、配列に変換する必要があります。
rbs = np.array([ish[4] for ish in realbooks])