Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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/4/matlab/16.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.einsum错误:操作数的下标太多_Python_Matlab_Multiplication_Tensor_Numpy Einsum - Fatal编程技术网

Python numpy.einsum错误:操作数的下标太多

Python numpy.einsum错误:操作数的下标太多,python,matlab,multiplication,tensor,numpy-einsum,Python,Matlab,Multiplication,Tensor,Numpy Einsum,我正在尝试使用einsum执行张量乘法。我在MATLAB中工作,但使用python接口调用numpy.einsum,如中所述。下面是我用来执行乘法的代码: np=py.importlib.import_模块('numpy'); ndim=3;i=眼睛(ndim); I=np.einsum('il,jk',matpy.mat2nparray(I),matpy.mat2nparray(I)); I4=matpy.nparray2mat(。。。 np.einsum('ijxyz,klxyz->ijkl

我正在尝试使用
einsum
执行张量乘法。我在MATLAB中工作,但使用python接口调用
numpy.einsum
,如中所述。下面是我用来执行乘法的代码:

np=py.importlib.import_模块('numpy');
ndim=3;i=眼睛(ndim);
I=np.einsum('il,jk',matpy.mat2nparray(I),matpy.mat2nparray(I));
I4=matpy.nparray2mat(。。。
np.einsum('ijxyz,klxyz->ijklxyz',I,matpy.mat2nparray(一个([30,30,30]));
但是,上述代码失败,出现以下错误:

ValueError: einstein sum subscripts string contains too many subscripts for operand 0

你能提供一个可复制的例子()吗?什么是
ndim
?ndim只是一个任意数,我在三维空间中进行计算,因此ndim有3个。在对
einsum
的第二次调用中,第一个数组是4维的,第二个数组是3维的,但在einsum调用中,您对这两个数组都使用了5个索引。这就是问题所在。如果你只是想要一种外部产品,也许你正在寻找
'ijkl,xyz->ijklxyz'
?虽然这可能不需要einsum。如果我的直觉是正确的,那么
I=I[…,None,None]*I
然后
I4=I[…,None,None]*np.ones((30,30,30))
来广播。我被告知从MATLAB调用python时不能使用
None
来注入单体维度。您仍然可以使用
重塑
,但我想在这种情况下,您可能会对
einsum
感到厌烦。您能提供一个可复制的示例()吗?什么是
ndim
?ndim只是一个任意数,我在三维空间中进行计算,因此ndim有3个。在对
einsum
的第二次调用中,第一个数组是4维的,第二个数组是3维的,但在einsum调用中,您对这两个数组都使用了5个索引。这就是问题所在。如果你只是想要一种外部产品,也许你正在寻找
'ijkl,xyz->ijklxyz'
?虽然这可能不需要einsum。如果我的直觉是正确的,那么
I=I[…,None,None]*I
然后
I4=I[…,None,None]*np.ones((30,30,30))
来广播。我被告知从MATLAB调用python时不能使用
None
来注入单体维度。您仍然可以使用
重塑
,但我想在这种情况下,您可能会对
einsum
感到厌烦。