对于给定的k,求和所有可能对(x_ik,y_j)的最有效方法是什么



我有两个形状为(n,m)的numpy数组x和形状为(p,)y。我想对所有可能的对x[k, i]y[j]求和,以创建形状为(n, m*p)的新numpy数组z

一个天真的算法是:

import numpy as np
# some code
z = np.empty((n, m*p))
for k in range(n):
for i in range(m):
for j in range(p):
z[k, i + m * j] = x[k, i] + y[j]

该算法具有多项式复杂度:O(n*m*p)知道我正在用$n~1e6$处理数组,我正在寻找一种使用numpy和/或panda的力量的更有效的算法。

我做了一些研究,找到了一个可能的解决方案:求和所有可能对的有效方法

但它不适合我的特定问题,我的意思是我可以使用它,但它仍然不会像我用一个循环迭代那样是蟒蛇式的(对于n=1,该解决方案是可重用的,无需太多努力(。

正如其他人在评论中所说,没有提高复杂性,而是利用了矢量化和内存邻接性:

np.add.outer(X,y).reshape(len(X), -1)

最新更新