векторизованное вычисление многих матричных экспонент - PullRequest
0 голосов
/ 03 февраля 2020

У меня много матриц 2 на 2, A, A.shape == (2, 2, 7324), и я должен вычислить экспоненциальную матрицу всех этих матриц. К сожалению, scipy.linalg.expm принимает только одну матрицу за раз, так что мне придется l oop за вычисления,

import numpy
import scipy.linalg

numpy.random.seed(0)
A = numpy.random.rand(2, 2, 7324)

out = numpy.array([scipy.linalg.expm(A[:, :, k]) for k in range(A.shape[-1])])
out = numpy.moveaxis(out, 0, -1)

Есть ли способ избежать этого l oop?

1 Ответ

0 голосов
/ 04 февраля 2020

Из-за просмотра кода, https://github.com/scipy/scipy/blob/v1.4.1/scipy/sparse/linalg/matfuncs.py#L550 -L595 кажется, что он действительно предполагает только одну матрицу. Поэтому, если вы хотите избежать python l oop, вам нужно извлечь соответствующие части и либо цитонизировать, либо numpy -векторизовать их самостоятельно. Только угощение плотными матрицами может сделать это легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...