Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Numpy_Vectorization_Numpy Einsum - Fatal编程技术网

Python 二维阵列上的矢量化NumPy三重积

Python 二维阵列上的矢量化NumPy三重积,python,arrays,numpy,vectorization,numpy-einsum,Python,Arrays,Numpy,Vectorization,Numpy Einsum,我正在尝试对下面名为p的nxn数组上的以下三重乘积操作进行矢量化: for j in range(len(p)): for k in range(len(p)): for l in range(len(p)): h[j, k, l] = p[j, k] * p[k, l] * p[l, j] - p[j, l] * p[l, k] * p[k, j] 我认为numpy.einsum应该在这里有用,尽管我并没有对重复的索引进行求和,但我无法确定它。

我正在尝试对下面名为
p
nxn
数组上的以下三重乘积操作进行矢量化:

for j in range(len(p)):
    for k in range(len(p)):
        for l in range(len(p)):
            h[j, k, l] = p[j, k] * p[k, l] * p[l, j] - p[j, l] * p[l, k] * p[k, j]

我认为
numpy.einsum
应该在这里有用,尽管我并没有对重复的索引进行求和,但我无法确定它。想法?

只要将这些循环迭代器作为字符串符号进行移植,我们就会有这样一个基于循环迭代器的解决方案-

h = np.einsum('jk,kl,lj->jkl',p,p,p) - np.einsum('jl,lk,kj->jkl',p,p,p)
h = p[...,None]*p*p[:,None,:].T - p[:,None,:]*p.T*p.T[...,None]
基本上是一个与扩展相关的问题(因为我们没有减少任何轴),我们也可以通过在不同的地方引入带有
None/np.newaxis
的新轴来使用,以允许扩展,如下所示-

h = np.einsum('jk,kl,lj->jkl',p,p,p) - np.einsum('jl,lk,kj->jkl',p,p,p)
h = p[...,None]*p*p[:,None,:].T - p[:,None,:]*p.T*p.T[...,None]