1

私はnumpy配列y [1,2,3,4,5,6,1,2,3,4,5,6]を持っています

次に、numpy csr 形式の行列 X があります。

1) y の要素 6 をマスクする必要があります。次に、X の対応する行をマスクする必要があります。

したがって、y.shape は 12 です。10 のはずです。X は 12,20 です。10,20 である必要があります。

numpyでこれを行うにはどうすればよいですか

4

4 に答える 4

1

私は自分の質問に答えるのが好きではありませんが、csr マトリックスを扱うための適切な解決策は次のとおりです。

X = X[np.where(y != 6)[0]]
y = y[y != 6]
于 2012-09-13T15:21:57.573 に答える
1

「マスクされた」出力yが入力よりも小さくなければならない場合、実際にはマスクを使用していません。

前の質問で示唆されているようにy、6 とは異なるインデックスを簡単に見つけることができます。

condition = (y != 6)

yこれは、6以外の値を取得するために使用できる abool 配列です。

y = y[condition]

conditionの対応する行を取得するために同じものを使用できますがX、それは CSR であり、したがって複雑なインデックスの書式設定をサポートしていません。あなたはまだそれをLILに変換して戻すことができます.

y !=6インデックスを取得することもできます

(indices,) = np.nonzero(y != 6)

これは、インデックスに使用できる通常の整数配列ですX

于 2012-09-12T13:23:33.567 に答える
0

あなたの質問を 100% 理解しているとは言えませんが、おそらくこれが役立つでしょう:

>>> import numpy as np
>>> a = np.array(range(1,7)*2)  #Your array.
>>> a
array([1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6])
>>> b = np.array(list(a)*20).reshape(12,20) #just some matrix of right size and shape. np.empty(12,20) would probably work just as well.
>>> b
array([[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]])


>>> mask = a != 6 #mask.  True for all points except ones where value == 6.
>>> b[mask,:]   #take points along first axis where mask==True, all points along second axis.
array([[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
       [5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
       [3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4]])
于 2012-09-12T13:19:32.977 に答える
0

非ゼロを使用します。

(x が既に定義されていると仮定します)

import numpy as np
y = np.array([1,2,3,4,5,6,1,2,3,4,5,6])
keepers = np.nonzero(y != 6)
y = y[keepers]
x = x[keepers, :]
于 2012-09-12T13:22:15.573 に答える