ndarray
2 次元行列を表す複雑な条件が成立するすべての行を取得する最も簡単な方法は何ですか? たとえば、すべての値が 5 より大きい、またはすべての値が 5 より小さいすべての行を取得しますか?
ありがとう。
おそらく、ブール配列をインデックス付けに使用できることをご存知でしょう。たとえば、次のようになります。
import numpy as np
x = np.arange(10)
x2 = x[x<5]
ブール配列の場合np.all
、特定の軸に適用できます。
y = np.arange(12).reshape(3,4)
b = y < 6
b1 = np.all(b, axis=0)
b2 = np.all(b, axis=1)
y1 = y[b1]
y2 = y[b2]
基準を満たす配列のみを返すため、形状は保持されません。(形状を保持する必要がある場合は、マスクされた配列を参照してください。)
これにより、すべての値が 5 より小さいまたは大きい行の行インデックスが得られます。
x = numpy.arange(100).reshape(20,5)
numpy.where((x > 5).all(axis=1) ^ (x < 5).all(axis=1))
またはより簡潔に(ただし、同じロジックを介して進めません):
numpy.where(((x > 5) ^ (x < 5)).all(axis=1))
インデックスではなくデータを取得するには、ブール値の結果を直接使用します。
x[((x > 5) ^ (x < 5)).all(axis=1)]