2017-02-06 10 views
0

私は2Dベクトルとクラスラベルを別々の配列に持つ2つの配列aを持っています。クラスラベルにしたがってnumpyデータ配列の行を個別のnumpy配列で選択する方法は?

a = np.random.random_sample((10000,2)) 
labels = [0]*10000 

は、私は今、三つのクラス1、2と3があり、この

plot_data(a,np.matrix(np.asarray(labels))) 

のようにそれらを使用して、私は、各クラスに対応する「」ベクトルから行を抽出し、それをプロットしていきます。 私はそれを達成することができません。私は以下を試みたが、うまくいきませんでした。

indices_0 = [k for k in range(0, X.shape[0]) if np.all(y == 1)] 
indices_1 = [k for k in range(0, X.shape[0]) if np.all(y == 2)] 
indices_2 = [k for k in range(0, X.shape[0]) if np.all(y == 3)] 

(MATLABのFINDのような)行を選択するにはどうすればいいですか?

+0

'np.where(ラベルになり、あなたのラベルは例えば '0'に等しいインデックスを取得するための標準的なnumpyの道:私は、MATLABユーザのために、このチートシートをお勧めします== 0)[0] '。この場合、 'np.where'はタプルを返すので、最後に '[0]'が必要です。 –

答えて

0

あなたが探しているのは、NumPyのnonzeroメソッドです。

indices_0 = a[np.nonzero(labels == 0)] 
indices_1 = a[np.nonzero(labels == 1)] 
indices_2 = a[np.nonzero(labels == 2)] 
説明

  • labels == 0が指定された値を持つベクトルlabelsのすべての要素に対してTrueFalseの配列を返し、
  • するとこうしてみてください

  • np.nonzero(...)はインデックスのリストを返します。 の値を持つ
  • は、nonzeroで指定したインデックスでフィルタされたindicesマトリックスの行を返します。

はところで:https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html

+0

これは動作しません。ごめんなさい! – Hooli

関連する問題