什麼會是一種有效的(時間,容易)由不同的列條件(例如,由第2點的值組)和運行F1()和f2()在每個這些基團的一個分組2D numpy的矩陣中的行的方法。如何分組行基於列值的numpy的二維矩陣?
感謝
什麼會是一種有效的(時間,容易)由不同的列條件(例如,由第2點的值組)和運行F1()和f2()在每個這些基團的一個分組2D numpy的矩陣中的行的方法。如何分組行基於列值的numpy的二維矩陣?
感謝
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))
如果你有形狀(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]])
的緊湊解決方案是使用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)
嗨Eelco!很遺憾,我無法通過其他方式與您聯繫。看起來我們正在進行類似的項目。請看看https://github.com/ml31415/numpy-groupies,它也是一組numpy的GROUPBY操作。相反周圍有兩個類似的項目,它可能是有意義的合力。 – Michael 2016-10-20 15:35:36
這樣的回答表明,一般的Python函數,因此性能可能會比numpy的顯著降低。 – Tanriol 2015-04-13 08:45:59