2017-02-01 5 views
3

は、誰かがnp.arrayがどのように見える別のnumpyののpython:別の列に一意の各値の列の最大値を探す

に一意の各値のために1列に最大値を取得するための効率的な方法を提案することができますこの[COLUMN0、column1の、column2の、COLUMN3]私は次のようになります。新しい配列した後、カラム3の一意の値に基づいて、列1の最大値を返すようにしたい

[[ 37367 421 231385  93] 
[ 37368 428 235156  93] 
[ 37369 408 234251  93] 
[ 37372 403 196292  93] 
[ 55523 400 247141 139] 
[ 55575 415 215818 139] 
[ 55576 402 204404 139] 
[ 69940 402 62244  175] 
[ 69941 402 38274  175] 
[ 69942 404 55171  175] 
[ 69943 416 55495  175] 
[ 69944 407 90231  175] 
[ 69945 411 75382  175] 
[ 69948 405 119129 175]] 

[[ 37368 428 235156  93] 
[ 55575 415 215818 139] 
[ 69943 416 55495 175]] 

は私がループすることにより、これを行う方法を知っているが、それは私が働いているテーブルはかなり大きいですので、私は後に探していたものではないと私はここに1つのアプローチだ

答えて

3

をループ避けたい -

# Lex-sort combining cols-1,3 with col-3 setting the primary order 
sidx = np.lexsort(a[:,[1,3]].T) 

# Indices at intervals change for column-3. These would essentially 
# tell us the last indices for each group in a lex-sorted array 
idx = np.append(np.flatnonzero(a[1:,3] > a[:-1,3]), a.shape[0]-1)  

# Finally, index into idx with lex-sorted indices to give us 
# the last indices in a lex-sorted version, which is equivalent 
# of picking up the highest of each group 
out = a[sidx[idx]] 

サンプルの実行 - 私たちは、SLできるビュー

In [234]: a # Input array 
Out[234]: 
array([[ 25, 29, 19, 93], 
     [ 27, 59, 14, 93], 
     [ 24, 46, 15, 93], 
     [ 79, 87, 50, 139], 
     [ 13, 86, 32, 139], 
     [ 56, 25, 85, 142], 
     [ 62, 62, 68, 142], 
     [ 27, 25, 20, 150], 
     [ 29, 53, 71, 150], 
     [ 64, 67, 21, 150], 
     [ 96, 57, 73, 150]]) 

In [235]: out # Output array 
Out[235]: 
array([[ 27, 59, 14, 93], 
     [ 79, 87, 50, 139], 
     [ 62, 62, 68, 142], 
     [ 64, 67, 21, 150]]) 

パフォーマンスの向上同じメモリ空間を使用するためにa[:,[1,3]]の代わりにa[:,1::2]の氷を使用すると、パフォーマンスの向上が期待できます。 メモリビューを確認しましょう。

In [240]: np.may_share_memory(a,a[:,[1,3]]) 
Out[240]: False 

In [241]: np.may_share_memory(a,a[:,1::2]) 
Out[241]: True 
+0

うわー、このメソッドはちょうど私が後になったタイプです。もう一度@Divakarに感謝します。私は本当にあなたの献身を感謝します。あなたは私の初心者の質問の多くに本当に早く答えました – RaduS

関連する問題