我想计算mm*n维数组的mm子数组的行列式,并且想用一种更快/更优雅的方式来计算。暴力方法有效:
import numpy as n
array=n.array([[[0.,1.,2.,3.],[2,1,1,0]],[[0.5, 0.5,2,2],[0.5,1,0,2]]])
detarray=n.zeros(4)
for i in range(4):
detarray[i]= n.linalg.det(array[:,:,i])
我本想用apply_沿着_轴来做这个,但是我知道这只适用于函数的一维参数,所以我想我不能让它工作。在
但是,我认为在轴上应用_轴也可以:
^{pr2}$但这给了我一个错误: “det()只接受1个参数(给定2个)”
有人知道为什么这样不行吗?如果这种类型的计算真的不可能用apply_over_轴,有没有比for循环更好的方法?在
利用3D数组的transpose semantics of NumPy,您可以简单地将转置数组传递给^{} ,如下所示:
就性能而言,这种方法的速度似乎是另一种使用
^{pr2}$numpy.moveaxis
手动移动轴的方法的两倍numpy.linalg.det
是开箱即用的矢量化。您只需将外部轴向左移动:相关问题 更多 >
编程相关推荐