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>),乘以
和c
然后对结果求和。f
x
、y
和z
值进行评估,还是对一个特定的(x,y,z)
坐标进行评估,还是让函数可以对任意(x,y,z)进行评估
通过这个操作?我想我的意思是:在这个练习中,(x,y,z)来自哪里?(x,y,z)应该是任意的。