Python 缺少元素的向量求和
我希望解决以下元素定义的求和问题: 其中,Python 缺少元素的向量求和,python,numpy,vectorization,Python,Numpy,Vectorization,我希望解决以下元素定义的求和问题: 其中,z和lambda的元素为复数类型,N为实数,向量长度为。这可以在一个循环中完成,但效率很低。以下是我的解决方案: import numpy as np N = 10 z = np.random.rand(N) lamb = np.random.rand(N) s = [] indexs = np.arange(N) for idx in indexs: summand = np.sum(1/(z[idx] - lamb[indexs[i
z
和lambda
的元素为复数类型,N
为实数,向量长度为。这可以在一个循环中完成,但效率很低。以下是我的解决方案:
import numpy as np
N = 10
z = np.random.rand(N)
lamb = np.random.rand(N)
s = []
indexs = np.arange(N)
for idx in indexs:
summand = np.sum(1/(z[idx] - lamb[indexs[indexs!=idx]]))
s.append(summand/N)
s = np.array(s)
有谁能告诉我一个完整的
numpy
解决方案的方向吗?你可以通过广播减去lamb
,以这种方式生成一个(len(z),len(lamb))
形状的数组,然后将其对角线项设置为0
,以使它们满足lamb[indexs[indexs!=idx]]
和总和
沿第二个轴:
import numpy as np
N = 10
z = np.random.rand(N)
lamb = np.random.rand(N)
ss = 1 / np.subtract.outer(z, lamb)
np.fill_diagonal(ss, 0)
ss = ss.sum(axis=1) / N
out = z[:,None]-lamb
np.fill_diagonal(out, 0)
out = (1/out).sum(1)/N