有没有办法在numpy.linalg.det
数组(多频段图片中的一条线)上使用numpy.linalg.inv
或nx3x3
?现在我正在做类似的事情:
det = numpy.array([numpy.linalg.det(i) for i in X])
但肯定有更有效的方法。当然,我可以使用map
:
det = numpy.array(map(numpy.linalg.det, X))
还有其他更直接的方法吗?
答案 0 :(得分:3)
我很确定没有比你拥有的更有效的方式。您可以通过首先为结果创建一个空数组并将所有结果直接写入该数组来保存一些内存:
res = numpy.empty_like(X)
for i, A in enumerate(X):
res[i] = numpy.linalg.inv(A)
但这不会更快 - 它只会使用更少的内存。
答案 1 :(得分:1)
“正常”行列式仅为矩阵定义(维度= 2),所以如果这是您想要的,我看不到另一种方式。
如果您真的想要计算多维数据集的行列式,那么您可以尝试实现此处描述的方法之一: http://en.wikipedia.org/wiki/Hyperdeterminant
请注意,它不一定与您当前正在计算的值相同。