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