gpt4 book ai didi

python - Numpy 在所有行对上广播元素乘积?

转载 作者:行者123 更新时间:2023-12-01 01:07:30 24 4
gpt4 key购买 nike

我有一个形状为 (n,) 的 1d ndarray A 和一个形状为 (n,m) 的 2d ndarray E。我正在尝试执行以下计算(圆点表示元素乘法):

enter image description here

我已经使用 for 循环编写了它,但是这段代码被调用了数千次,我希望有一种方法可以通过广播或 numpy 函数来完成此操作。以下是我尝试重写的 for 循环解决方案:

def fun(E, A):
X = E * A[:,np.newaxis]
R = np.zeros(E.shape[-1])
for ii in xrange(len(E)-1):
for jj in xrange(ii+1, len(E)):
R += X[ii] * X[jj]
return R

如有任何帮助,我们将不胜感激。

当前的方法,但仍然不起作用:

def fun1(E, A):
X = E * A[:,np.newaxis]
R = np.zeros(E.shape[-1])
for ii in xrange(len(E)-1):
for jj in xrange(ii+1, len(E)):
R += X[ii] * X[jj]
return R

def fun2(E, A):
n = E.shape[0]
m = E.shape[1]

A_ = np.triu(A[1:] * A[:-1].reshape(-1,1))
E_ = E[1:] * E[:-1]
R = np.sum((A_.reshape(n-1, 1, n-1) * E_.T).transpose(0,2,1).reshape(n-1*n-1,m), axis=0)

return R

A = np.arange(4,9)
E = np.arange(20).reshape((5,4))

print fun1(E,A)
print fun2(E,A)

最佳答案

现在,这应该可以工作:

def fun3(E,A):
n,m = E.shape
n_ = n - 1

X = E * A[:, np.newaxis]
a = (X[:-1].reshape(n_, 1, m) * X[1:])
b = np.tril(np.ones((m, n_, n_))).T
R = np.sum((a*b).reshape(n_*n_, m), axis=0)

return R

最后一个函数仅基于给定的公式。相反,这是基于 fun 并使用您添加的测试用例进行测试的。

希望这对您有用!

关于python - Numpy 在所有行对上广播元素乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com