Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy二维矩阵乘法_Python_Numpy - Fatal编程技术网

Python numpy二维矩阵乘法

Python numpy二维矩阵乘法,python,numpy,Python,Numpy,我有三个numpy矩阵x,r和r。其值为: 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],

我有三个numpy矩阵x,r和r。其值为:

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]])
我要做的是:(很难用语言来描述,所以我用代码来表达我想做的事情)

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

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

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

 [[111. -54.]
  [-54.  82.]]]
没有for循环,有什么优雅的或类似python的方法来实现这一点吗


谢谢

这应该适合您:

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