【发布时间】:2016-04-12 05:09:58
【问题描述】:
我得到了一个 float128 值的矩阵“x”,并且在以下情况下出现下一个错误:
> q = (inv(xt * x) * xt) * n
> array type float128 is unsupported in linalg
其中xt 是x 和n 其他float128 矩阵的转置。该矩阵的所有其他操作都得到正确处理,如转置或矩阵乘积。
是的,这种情况下我需要 float128,否则结果与我们作为参考的更接近真实值的结果不同。
【问题讨论】:
-
这个错误消息对我来说似乎很简单:NumPy 中的 float128 支持不完整或一致。
-
@xnx 是的,我需要一个解决方法:p
-
这听起来有点像XY problem。如果您要根据预期的参考结果测试计算出的浮点结果,那么无论如何您都不能指望完全相等,因此您需要在测试中建立一个容差;再多的额外精度也不会让这种需求消失。 (当然,公差应该是多少是另一个困难且与任务相关的问题。)你确定你需要额外的精度吗?
-
另一条评论:从您显示的代码来看,您似乎正在解决最小二乘问题。您是否有任何理由不使用现有的 NumPy 和 SciPy 例程进行最小二乘?这些可能比本土版本在数字上更稳健。 (特别是,实际上反转
xt*x并不是解决最小二乘问题的最有效或最稳定的方法。) -
相关:johndcook.com/blog/2010/01/19/dont-invert-that-matrix。直接反转矩阵几乎不是一个好主意。
标签: python python-3.x numpy matrix-inverse