2017-04-17 11 views
2

から正および負のデータを選択し、私は次の関数を書かれている:はランダムに配列

def searchPosotive (X,y, num): 
    pos = sample(list(compress(X, y)), num) 
    return (pos) 

この関数は、2つのnumpyの行列の、Xyになります。これらの2つの配列は関連しています。 X[i]y[i]のラベルです。ラベルのいずれかである1または0

この関数は、ランダムにその等価y値は1に等しく、nはXの列数である(num, n)配列を返すXからnum値を選びます。

インデックス値が含まれているリストを取得する必要があります。たとえば、pos[a] == X[a]の場合は、aがそのリストに含まれている必要があります。これどうやってするの?

また、私が負の例を探しているときにこれを行う必要があります。私が使用する現在の機能は次のとおりです。あなたはあなたの正(または負)のインデックスを取得するためにnp.whereを使用したい

def searchNegative (X,y, num): 
    mat=X[y==0] 
    rows = np.random.choice(len(mat), size=num,replace=False) 
    mat=mat[rows,:] 
    return (mat) 
+0

制約を満たす可能性のあるすべてのインデックスを持つ別の配列を作成できます。次に、この新しい配列のサイズから0と1の間の乱数を生成します。この項目を配列から削除し、 'num'回繰り返す。 – kbunarjo

+0

いくつかのサンプルデータを提供できますか? –

+0

あなたは 'itertools.compress'を使用していますか?ただ配列のインデックスを使用してください! –

答えて

3

Yさん。次に、インデックスからののサンプル。ここでは、正のための機能があります、あなたは、正または負の選択、または負のためだけに別の関数を書いてみましょうし、それを修正することができ、次のいずれか まず、前提としています

>>> y 
array([1, 0, 1, 1, 1, 0, 0, 1, 0, 1]) 
>>> X 
array([[-25, 62, 94, 70, 96, 70, 38, -18, -57, 1], 
     [ 40, 86, -98, -48, 40, 29, 4, -83, 44, -12], 
     [ 57, 23, -96, 97, -24, -93, -33, -64, 61, 15], 
     [ 44, 29, 31, -38, 11, 85, 37, -96, -37, -70], 
     [-10, -37, -24, -66, 27, -44, -16, -50, 3, -91], 
     [-97, 81, 52, 41, 39, -14, 95, 76, 28, -32], 
     [-74, 49, -91, -65, -96, 86, -13, 43, 22, 80], 
     [ 5, 20, -77, 74, -89, 46, -90, 95, 30, 13], 
     [ 36, 6, 55, -74, -49, -66, 38, 37, -84, 28], 
     [-23, -28, -32, -30, -4, -52, -4, 99, -67, -98]]) 

そしてそうに...

>>> def sample_positive(X, y, num): 
...  pos_index = np.where(y == 1)[0] 
...  rows = np.random.choice(pos_index, size=num, replace=False) 
...  mat = X[rows,:] 
...  return (mat, rows) 
... 
>>> X_sample, idx = sample_positive(X, y, 2) 
>>> X_sample 
array([[-23, -28, -32, -30, -4, -52, -4, 99, -67, -98], 
     [-10, -37, -24, -66, 27, -44, -16, -50, 3, -91]]) 
>>> idx 
array([9, 4]) 
>>> X 
array([[-25, 62, 94, 70, 96, 70, 38, -18, -57, 1], 
     [ 40, 86, -98, -48, 40, 29, 4, -83, 44, -12], 
     [ 57, 23, -96, 97, -24, -93, -33, -64, 61, 15], 
     [ 44, 29, 31, -38, 11, 85, 37, -96, -37, -70], 
     [-10, -37, -24, -66, 27, -44, -16, -50, 3, -91], 
     [-97, 81, 52, 41, 39, -14, 95, 76, 28, -32], 
     [-74, 49, -91, -65, -96, 86, -13, 43, 22, 80], 
     [ 5, 20, -77, 74, -89, 46, -90, 95, 30, 13], 
     [ 36, 6, 55, -74, -49, -66, 38, 37, -84, 28], 
     [-23, -28, -32, -30, -4, -52, -4, 99, -67, -98]]) 
>>> y 
array([1, 0, 1, 1, 1, 0, 0, 1, 0, 1]) 
関連する問題