我正在使用Numpy处理二维数组来进行极限学习机的工作。我的其中一个数组H是随机的,我想计算它的伪逆。
如果我使用scipy.linalg.pinv2,一切都很顺利。但是,如果我使用scipy.linalg.pinv,有时候(30-40%的情况下)会出现问题。
我之所以使用pinv2,是因为我在这里读到(http://vene.ro/blog/inverses-pseudoinverses-numerical-issues-speed-symmetry.html),pinv2能够更好地处理“高”和“宽”数组。
问题在于,如果H有一列j全是1,pinv(H)在第j行上有很大的系数。 这反过来又是一个问题,因为在这种情况下,np.dot(pinv(H),Y)包含一些nan值(Y是一个由小整数组成的数组)。
现在,我对线性代数和数值计算不够了解,无法确定这是一个错误还是两个函数精度相关的属性。如果是这样,请您回答这个问题,这样我就可以提交错误报告(老实说,此时我甚至不知道该写什么)。
我用 np.savetxt(fn, a, '%.2e', ';') 保存了数组:请参见 https://dl.dropboxusercontent.com/u/48242012/example.tar.gz 查找它们。
感谢您的帮助。在提供的文件中,您可以在 pinv(H).csv 中看到第14、33、55、56和99行具有巨大的值,而在 pinv2(H) 中相同的行具有更好的值。
感谢您的帮助。
我之所以使用pinv2,是因为我在这里读到(http://vene.ro/blog/inverses-pseudoinverses-numerical-issues-speed-symmetry.html),pinv2能够更好地处理“高”和“宽”数组。
问题在于,如果H有一列j全是1,pinv(H)在第j行上有很大的系数。 这反过来又是一个问题,因为在这种情况下,np.dot(pinv(H),Y)包含一些nan值(Y是一个由小整数组成的数组)。
现在,我对线性代数和数值计算不够了解,无法确定这是一个错误还是两个函数精度相关的属性。如果是这样,请您回答这个问题,这样我就可以提交错误报告(老实说,此时我甚至不知道该写什么)。
我用 np.savetxt(fn, a, '%.2e', ';') 保存了数组:请参见 https://dl.dropboxusercontent.com/u/48242012/example.tar.gz 查找它们。
感谢您的帮助。在提供的文件中,您可以在 pinv(H).csv 中看到第14、33、55、56和99行具有巨大的值,而在 pinv2(H) 中相同的行具有更好的值。
感谢您的帮助。
pinv2
已被弃用。 - skjerns