Вы правы, что на самом деле ценности положительные. Однако Numpy здесь использует 32-разрядное целочисленное представление этих чисел (на 64-разрядных компьютерах, вероятно, используется 64-разрядное число).
Таким образом, это означает, что массив может содержать только числа между -2 31 и 2 31 -1 в качестве значений. Если вы выполняете вычисления с большими числами, то обычно происходит циклический переход, выполняется арифметика, а последние 32-разрядные числа будут интерпретироваться как 32-разрядное число со знаком.
Мы можем использоватьнапример, 128-битное число с плавающей запятой, чтобы получить аппроксимацию значений:
>>> A = np.array([[3,2],[1,4]]<b>, dtype=np.float128</b>)
>>> 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]]<b>, dtype=np.float64</b>)
>>> np.linalg.matrix_power(A, 1024)
array([[<b>inf</b>, inf],
[inf, inf]])