Как поднять numpy.matrix на нецелую силу?

Оператор ** для numpy.matrix не поддерживает нецелую силу:

 >>> m matrix([[ 1. , 0. ], [ 0.5, 0.5]]) >>> m ** 2.5 TypeError: exponent must be an integer 

Я хочу, чтобы

 octave:14> [1 0; .5 .5] ^ 2.5 ans = 1.00000 0.00000 0.82322 0.17678 

Могу ли я сделать это с помощью numpy или scipy ?

Заметка:

это НЕ элементарная работа. Это матрица (в линейной алгебре), поднятая до некоторой степени, как говорилось в этой статье .

Вы можете использовать scipy.linalg.fractional_matrix_power :

 >>> m matrix([[ 1. , 0. ], [ 0.5, 0.5]]) >>> scipy.linalg.fractional_matrix_power(m, 2.5) array([[ 1. , 0. ], [ 0.8232233, 0.1767767]]) 

Из этого вопроса вы можете видеть, что мощность матрицы может быть переписана как: введите описание изображения здесь ,

Этот код, используя scipy.linalg, дает в результате то же самое, что и Octave:

 import numpy as np from scipy.linalg import logm, expm M = np.matrix([[ 1. , 0. ],[ 0.5, 0.5]]) x = 2.5 A = logm(M)*x P = expm(A) 

Это результат для P:

 Out[19]: array([[ 1. , -0. ], [ 0.8232233, 0.1767767]])