Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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中具有索引依赖函数的元素矩阵积的高效计算_Python_Numpy - Fatal编程技术网

Python中具有索引依赖函数的元素矩阵积的高效计算

Python中具有索引依赖函数的元素矩阵积的高效计算,python,numpy,Python,Numpy,我有一个有趣的问题,我想计算三个矩阵的元素乘积的和 虽然计算\mathbf{p}{ijk}和c{ijk}可以预先完成,但我对f{ijk}(x,y,z)有问题。该矩阵的元素是依赖于矩阵指数的多元多项式,因此numpy.vectorize不能简单地应用。我解决这个问题的最佳方法是将(i,j,k)作为附加变量处理,这样numpy.vectorize随后将应用于6维而不是3维输入。然而,我不确定是否存在更有效或替代的方法 这是一种有效实施该公式的简单方法: 将numpy导入为np np.random.

我有一个有趣的问题,我想计算三个矩阵的元素乘积的和


虽然计算\mathbf{p}{ijk}和c{ijk}可以预先完成,但我对f{ijk}(x,y,z)有问题。该矩阵的元素是依赖于矩阵指数的多元多项式,因此numpy.vectorize不能简单地应用。我解决这个问题的最佳方法是将(i,j,k)作为附加变量处理,这样numpy.vectorize随后将应用于6维而不是3维输入。然而,我不确定是否存在更有效或替代的方法

这是一种有效实施该公式的简单方法:

将numpy导入为np
np.random.seed(0)
l、 m,n=4,5,6
x、 y,z=np.rand.rand(3)
p=np.rand.rand(l,m,n)
c=np.rand.rand(l,m,n)
i、 j,k=map(np.arange,(l,m,n))
席=(x**(L - I))*(x**)
yj=(y**(m-j))*(y**m)
zk=(z**(n-k))*(z**n)
RES=NP.EnMeSe(Ijk,Ijk,i,j,k->,p,c,席,yj,Zk)
打印(res)
# 0.0007208482648476157
或者更紧凑一点:

将numpy导入为np
np.random.seed(0)
l、 m,n=4,5,6
x、 y,z=np.rand.rand(3)
p=np.rand.rand(l,m,n)
c=np.rand.rand(l,m,n)
t=map(λv,s:(v**(s-np.arange(s)))*(v**s),(x,y,z),(l,m,n))
res=np.einsum('ijk,ijk,i,j,k->',p,c,*t)
打印(res)
# 0.0007208482648476157

使用最小化中间数组的需求,因此,首先要使<代码> f>代码>更快(例如,可以得到例如代码> f= NP .EnSUM(‘I,J,K->IJK’,席,YJ,ZK)< /C>),乘以 P>代码>

c
f
然后对结果求和。

您是打算对一组预先确定的
x
y
z
值进行评估,还是对一个特定的
(x,y,z)
坐标进行评估,还是让函数可以对任意
(x,y,z)进行评估
通过这个操作?我想我的意思是:在这个练习中,(x,y,z)来自哪里?(x,y,z)应该是任意的。