为什么在计算具有所有正数至1024的幂的矩阵时会得到负值?

问题描述 投票:2回答:1

我正在计算一个非常简单的2 * 2矩阵A =([[3,2],[1,4]])为其1024的幂。我正在使用一个numpy函数np.linalg.matrix_power(A,1024 )。如您所见,此矩阵中没有负数,但是Python返回的是负数。

我在其他计算机上尝试过,但仍返回负值。

import numpy as np
A = np.array([[3,2],[1,4]])
A_1024 = np.linalg.matrix_power(A, 1024)

结果是

array([[-1201800533,  1891366230],
       [-1201800533,  1891366230]])

我的期望值都是正数,但是为什么它返回负值?

numpy matrix matrix-multiplication
1个回答
1
投票

您是正确的,实际上这些值是正的。但是,此处的Numpy使用这些数字的32位整数表示形式(在64位计算机上,可能使用了64位数字)。

因此,该数组只能包含-2 312 31-1之间的数字作为值。如果您使用较大的数字进行计算,则通常会发生环绕操作,将执行算术运算,最后32位数字将重新解释为带符号的32位数字。

例如,我们可以使用一个128位浮点数来获得这些值的近似值:

>>> A = np.array([[3,2],[1,4]], dtype=np.float128)
>>> np.linalg.matrix_power(A, 1024)
array([[1.85422822e+715, 3.70845643e+715],
       [1.85422822e+715, 3.70845643e+715]], dtype=float128)

因此,我们看到数字约为1.854×10 715和3.708×10 715,它们是巨大的数字。一个32位数字只能表示最大2'147'483'647的值,因此远远低于实际值。

对于64位浮点数,它甚至不再可以表示,因此使用无穷大:

>>> A = np.array([[3,2],[1,4]], dtype=np.float64)
>>> np.linalg.matrix_power(A, 1024)
array([[inf, inf],
       [inf, inf]])
© www.soinside.com 2019 - 2024. All rights reserved.