2013-05-01 129 views

回答

-1
from operator import itemgetter 
sorted(my_numpy_array,key=itemgetter(1)) 

或可能像

from itertools import groupby 
from operator import itemgetter 
print groupby(my_numpy_array,key = itemgetter(1)) 
+5

這樣的回答表明,一般的Python函數,因此性能可能會比numpy的顯著降低。 – Tanriol 2015-04-13 08:45:59

7

如果你有形狀(rows, cols)數組arr,你可以在第2列所有數值的向量作爲

col = arr[:, 2] 

然後,您可以構建與您的分組條件的布爾數組,S AY組1由這些行的與具有在第2列大於5的值較大:

idx = col > 5 

您可以直接將此布爾數組到原始陣列,以選擇行:

group_1 = arr[idx] 
group_2 = arr[~idx] 

對於例如:

>>> arr = np.random.randint(10, size=(6,4)) 
>>> arr 
array([[0, 8, 7, 4], 
     [5, 2, 6, 9], 
     [9, 5, 7, 5], 
     [6, 9, 1, 5], 
     [8, 0, 5, 8], 
     [8, 2, 0, 6]]) 
>>> idx = arr[:, 2] > 5 
>>> arr[idx] 
array([[0, 8, 7, 4], 
     [5, 2, 6, 9], 
     [9, 5, 7, 5]]) 
>>> arr[~idx] 
array([[6, 9, 1, 5], 
     [8, 0, 5, 8], 
     [8, 2, 0, 6]]) 
4

的緊湊解決方案是使用numpy_indexed(聲明:我其作者),它實現一個完全矢量化解決這種類型的問題:

使用它最簡單的方法是:

import numpy_indexed as npi 
npi.group_by(arr[:, col1]).mean(arr) 

但是這也適用:

# run function f1 on each group, formed by keys which are the rows of arr[:, [col1, col2] 
npi.group_by(arr[:, [col1, col2]], arr, f1) 
+2

嗨Eelco!很遺憾,我無法通過其他方式與您聯繫。看起來我們正在進行類似的項目。請看看https://github.com/ml31415/numpy-groupies,它也是一組numpy的GROUPBY操作。相反周圍有兩個類似的項目,它可能是有意義的合力。 – Michael 2016-10-20 15:35:36