Вы можете манипулировать своими данными в pandas
и затем назначать.
Начиная с
mat = np.zeros((1000,1000))
a = np.random.randint(0,999,size=(50000,))
b = np.random.randint(0,999,size=(50000,))
c = np.random.rand(50000)
Вы можете определить функцию
def get_aggregated_collisions(a,b,c):
df = pd.DataFrame({'x':a, 'y':b, 'v':c})
df['coord'] = df[['x','y']].apply(tuple,1)
d = df.groupby('coord').agg({"v":'mean','x':'first', 'y':'first'}).to_dict('list')
return d
, а затем
d = get_aggregated_collisions(a,b,c)
mat[d['x'], d['y']] = d['v']
Вся операция (включая генерацию матриц, np.random
и т. Д.) Прошла нормально
1.05 s ± 30.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Идея создания tuple
координат заключалась в том, чтобы иметь хешируемую опцию для группировки значений по их координатам. Может быть, есть даже более разумный способ сделать это :) всегда открыт для предложений.