例如,有没有方法在nx3x3
阵列(多频带图像中的一行)上使用numpy.linalg.det
或numpy.linalg.inv
?现在我正在做一些类似的事情:
det = numpy.array([numpy.linalg.det(i) for i in X])
但肯定有更有效的方法。当然,我可以使用map
:
det = numpy.array(map(numpy.linalg.det, X))
还有其他更直接的方法吗?
我敢肯定,没有比现有方法更有效的方法了。您可以通过首先为结果创建一个空数组并将所有结果直接写入该数组来节省一些内存:
res = numpy.empty_like(X)
for i, A in enumerate(X):
res[i] = numpy.linalg.inv(A)
不过,这不会更快——只会占用更少的内存。
"正规"行列式只为矩阵(维数=2)定义,所以如果这是你想要的,我看不到其他方法。
如果你真的想计算一个立方体的行列式,那么你可以尝试实现这里描述的方法之一:http://en.wikipedia.org/wiki/Hyperdeterminant
请注意,它不一定与您当前正在计算的值相同。
一个老问题的新答案:自1.8.0版本以来,numpy支持评估一批2D矩阵。对于一批MxM矩阵,输入和输出现在看起来像:
线性det(a)
计算一个数组的行列式。参数a(…,M,M)array_like
要为计算行列式的输入数组。返回det(…)array_like
a.的决定因素
注意省略号。可以有多个";批量尺寸";,例如,您可以在网格上评估行列式。
https://numpy.org/doc/stable/reference/generated/numpy.linalg.det.html
https://numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html