0

A形状のnumpy行列と長さのあるブール値(m,n)のリストが与えられた場合、ブールリストの対応する要素がtrueである列を抽出したいと思います。indnA

私の最初の素朴な試み

Asub = A[:,cols]

ここで引用する必要はありませんが、非常に奇妙な結果が得られます...

この質問に対するpv。の回答に続いて、私はnumpy.ix_次のように試しました。

>>> A = numpy.diag([1,2,3])
>>> ind = [True, True, False]
>>> A[:,numpy.ix_(ind)]
array([[[1, 0]],

       [[0, 2]],

       [[0, 0]]])
>>> A[:,numpy.ix_(ind)].shape
(3, 1, 2)

結果は不適切な形になり(3,2)ます。結果の配列が必要です。結果を2次元に折りたたむことができると思いますが、これを行うためのより良い方法があるはずです。

4

2 に答える 2

4

ドキュメントで説明されているように、必要なブールインデックスは、「objがブール型の配列オブジェクト(比較演算子から返される場合など)の場合に発生します」。

IOW、タイプindである必要があります:ndarraybool

In [15]: A = numpy.diag([1,2,3])

In [16]: ind = [True, True, False]

In [17]: A[:,ind]
Out[17]: 
array([[0, 0, 1],
       [2, 2, 0],
       [0, 0, 0]])

これは、boolを整数として解釈し、列を提供するために発生します[1, 1, 0]

OTOH:

In [18]: A[:,numpy.array(ind)]
Out[18]: 
array([[1, 0],
       [0, 2],
       [0, 0]])
于 2012-11-09T13:11:08.677 に答える
1

ind配列に変換します。

>>> A[:, np.array(ind)]
array([[1, 0],
       [0, 2],
       [0, 0]])
于 2012-11-09T13:13:10.800 に答える