2
考慮一個簡單的記錄陣列結構:如何聚合NumPy記錄數組(總和,最小值,最大值等)?
import numpy as np
ijv_dtype = [
('I', 'i'),
('J', 'i'),
('v', 'd'),
]
ijv = np.array([
(0, 0, 3.3),
(0, 1, 1.1),
(0, 1, 4.4),
(1, 1, 2.2),
], ijv_dtype)
print(ijv) # [(0, 0, 3.3) (0, 1, 1.1) (0, 1, 4.4) (1, 1, 2.2)]
我想從v
aggregate某些統計(總和,最小值,最大值等)通過分組的I
和J
獨特組合。從SQL思維,預期的結果是:
select i, j, sum(v) as v from ijv group by i, j;
i | j | v
---+---+-----
0 | 0 | 3.3
0 | 1 | 5.5
1 | 1 | 2.2
(順序並不重要)
我能想起來的NumPy的是醜陋的最好的,和我沒有信心,我已經下令結果正確(雖然它似乎在這裏工作):
# Get unique groups, index and inverse
u_ij, idx_ij, inv_ij = np.unique(ijv[['I', 'J']], return_index=True, return_inverse=True)
# Assemble aggregate
a_ijv = np.zeros(len(u_ij), ijv_dtype)
a_ijv['I'] = u_ij['I']
a_ijv['J'] = u_ij['J']
a_ijv['v'] = [ijv['v'][inv_ij == i].sum() for i in range(len(u_ij))]
print(a_ijv) # [(0, 0, 3.3) (0, 1, 5.5) (1, 1, 2.2)]
我想有一個更好的方法來做到這一點!我正在使用NumPy 1.4.1。
我第一次嘗試將使用'(i,j)'元組作爲關鍵字來收集'collections.default_dict(list)'中的數據。然後,我可以在每個列表上預製所需的統計數據。 – hpaulj