如果您想保留矩阵运算的值,我会选择一些值将它们全部乘以。
例如:
1.23423
2.32423
4.2324534
将它们全部乘以 10000000,你得到
12342300
23242300
42324534
您可以使用矩阵执行乘法、加法等。执行完所有计算后,您可以根据您执行的操作将它们全部除以适当的值,从而将它们转换回浮点数。
从数学上讲,这是有道理的,因为
(Scalar multiplication)
M1` = M1 * 10000000
M2` = M2 * 10000000
Result = M1`.M2`
Result = (M1 x 10000000).(M2 x 10000000)
Result = (10000000 x 10000000) x (M1.M2)
因此,在乘法的情况下,您可以将结果除以 10000000 x 10000000。
如果它的加法/减法,那么你只需除以 10000000。
您可以通过对期望找到的小数的了解来选择要乘以的值,也可以通过扫描浮点数并在运行时自己生成值。
希望有帮助。
编辑:如果您担心超过整数的最大容量 - 那么您会很高兴知道 python 在发现溢出时会自动(并且默默地)将整数转换为长整数。您可以在 python 控制台中亲自查看:
>>> i = 3423
>>> type(i)
<type 'int'>
>>> i *= 100000
>>> type(i)
<type 'int'>
>>> i *= 100000
>>> type(i)
<type 'long'>
如果您仍然担心溢出,您总是可以选择一个较低的常数,但会稍微降低准确性(因为您将在小数点末尾丢失一些数字)。
此外,Eric Postpischil 提出的方法似乎是有道理的——但我自己还没有尝试过。我从更数学的角度给了你一个解决方案,这似乎也更“pythonic”