2016-09-27 13 views
0

私はサイズが* 2の配列がnumpyです。 (aの典型的なサイズは100です)。最初の列には、x_smallestとx_largestの間の値があります。 2番目の列には対応するy値があります。ほとんどすべてのxの値はユニークなので、それらをグループ化したいと思います。最初のグループのように、値x_smallestからx_1になります。 x_1からx_2までの2番目のグループ。 (x_smallest < x_1 < ... x_largest)。これは、私が有用なサイズを見つけることができるように調整可能でなければなりません。 x値は整数ではありませんが、y値は整数です。 (y値は1〜Nです)今度は、各グループについて、 "1>" y値に対する "n> 1" y値の割合を知りたいと思います。ここで、例えばアレイの小さな部分である:配列内の値をグループ化する

2.750000000000000000e+00,2.000000000000000000e+00 
3.100000000000000089e+00,5.000000000000000000e+00 
2.649999999999999911e+00,2.000000000000000000e+00 
2.500000000000000000e+00,2.000000000000000000e+00 
3.100000000000000089e+00,2.000000000000000000e+00 
2.799999999999999822e+00,5.000000000000000000e+00 
3.450000000000000178e+00,4.000000000000000000e+00 
3.200000000000000178e+00,5.000000000000000000e+00 
3.200000000000000178e+00,3.000000000000000000e+00 
2.399999999999999911e+00,1.000000000000000000e+00 

出力配列は、このようになります

1.5, 0 
2.5, 0.2 
3.5, 0.5 

(ここでx_valuesはX_IとX_I + 1の領域の中点です。)ここの出力例は、明らかにサンプル配列に適合しません。どのようにこれを簡単に行うことができるか考えていますか?私は、一般的なケースではあまり役に立たないelseコマンドをたくさん作成することについて考えることができました。

+0

で行うのは簡単である割合を計算することです* 1 "y値に対する" n> 1 "y値の割合*を意味します。*入力と出力の一致する例を教えてください。 * "私は他にも多くの特定のコマンドを作成することについて考えることができました" * - あなたはそのコードがどのように見えるか教えていただけますか? –

+0

yの値は整数です。だから特定のx値のグループに対して、私は '(1,1,2,2,4,5)'(ソートされている場合)というy値を持つことができます。今度は、「4」の値が1よりも大きく、「2」の値が値1を持つので、私が意味する割合は「4/2」です。 – HighwayJohn

答えて

0

さて、私は自分で解決したと思います。ここでは、ケース誰か内の溶液が似問題があり、この質問を見つけている:

numgroup = 5 # Number of Groups 
dmimax = numpy.amax(dmivsstasta[:, 0]) # Gets x_largest 
dmimin = numpy.amin(dmivsstasta[:, 0]) # Gets x_smallest 
stamax = numpy.amax(dmivsstasta[:, 1]) # Gets y_largest 
stepsize = (dmimax-dmimin)/5.0 # Determines size of a group 

grouparray = numpy.zeros((5, stamax+1)) # Creates array in which everything is saved 


for x in range(numgroup): 
    grouparray[x, 0] = dmimin+stepsize/2.0+x*stepsize # Saves midpositon of 
                 each group at first column 
print(grouparray) # Just to check values 
print(dmimin) 
print(dmimax) 
print(stepsize) 

for x1 in range(numgroup): # Iterates over all values 
    for x2 in range(rd): 
     if (grouparray[x1, 0]-stepsize/2.0) <= dmivsstasta[x2, 0] 
     < (grouparray[x1, 0]+stepsize/2.0): 
      grouparray[x1, dmivsstasta[x2, 1]] += 1 

print(grouparray) 

唯一欠けている部分は、私は理解していない今grouparray

関連する問題