我有两个大的NumPy阵列,每个阵列的形状为(519990,),看起来像这样:
Order = array([0, 0, 0, 5, 6, 10, 14, 14, 14, 23, 23, 39])
Letters = array([A, B, C, D, E, F, G, H, I, J, K, L])
如您所见,第一个数组始终为升序和正数。我想将信件中的所有内容按如下顺序分组:
{0:[A,B,C], 5:[D], 6:[E], 10:[F], 14:[G, H, I], 23:[J, K], 39:[L]}
我必须这样做的代码是:
df = pd.DataFrame()
df['order'] = Order
df['letters'] = Letters
linearDict = df.grouby('order').apply(lambda dfg:dfg.drop('order', axis=1).to_dict(orient='list')).to_dict()
endProduct = {}
for k, v in linearDict.items():
endProduct[k] = np.array(linearDict[k]['letter'][0:])
enProduct = {0:array([A,B,C]), 5:array([D]), 6:array([E]), 10:array([F]), 14:array([G, H, I]), 23:array([J, K]), 39:array([L])}
我的问题是这个过程太慢了。这对系统来说是一个巨大的消耗,它导致我的Jupyter笔记本崩溃。有没有更快的方法
试试这个:
输出:
使用:
我们可以通过将
sort=False
和agg传递给tuple
而不是list
来进一步提高性能:结果:
timeit
绩效结果:我们可以利用
Order
被排序的事实,在得到区间索引后,简单地切片Letters
,如下所示-样本运行-
相关问题 更多 >
编程相关推荐