gpt4 book ai didi

python - numpy 二维矩阵乘法

转载 作者:行者123 更新时间:2023-12-01 08:50:59 25 4
gpt4 key购买 nike

我有三个 numpy 矩阵 x、r 和 r。其值(value)观是:

x = np.array([[4,2],
[0,-1],
[-2,5],
[2,6]])

y = np.array([[1,7],
[2,6],
[5,2]])

r = np.array([[2,2,1],
[2,3,1],
[9,5,1],
[2,0,4]])

我要做的是:(很难用语言描述,所以我用代码来表达我想做的事情)

K = r.shape[1]
D = x.shape[1]

v = np.zeros((K, D, D))
for k in range(K):
v[k] = (r[:, k] * (x - y[k]).transpose() @ (x - y[k]))
print(v)

最后的 v 是我需要的,v 等于

[[[103.  38.]
[ 38. 216.]]

[[100. 46.]
[ 46. 184.]]

[[111. -54.]
[-54. 82.]]]

是否有任何优雅或Python式的方法可以在不使用for循环的情况下实现此目的?

谢谢

最佳答案

这应该适合你:

A = x[np.newaxis,...]-y[:,np.newaxis,:] # equivalent to (x-y[k]) for all k 
B = A.swapaxes(1,2) # equivalent to (x-y[k]).transpose() for all k
C = r.T[:,np.newaxis,:]*B # equivalent to r[:, k] * (x - y[k]).transpose()
D = C@A # equivalent to r[:, k] *(x - y[k]).transpose() @ (x - y[k])

或者以怪物不可读的形式

((r.T[:,np.newaxis,:]*(x[np.newaxis,...]
-y[:,np.newaxis,:]).swapaxes(1,2))@
(x[np.newaxis,...]-y[:,np.newaxis,:]))

证明:

>>> (v==((r.T[:,np.newaxis,:]*(x[np.newaxis,...]
-y[:,np.newaxis,:]).swapaxes(1,2))@
(x[np.newaxis,...]-y[:,np.newaxis,:]))).all()
True

关于python - numpy 二维矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127105/

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