Существует ли более быстрый способ найти квадратный корень матрицы для матриц из трехмерного массива? - PullRequest
0 голосов
/ 10 января 2019

Я новичок в Python и Numpy. Для данного трехмерного массива, содержащего матрицы, мне нужно найти квадратный корень для каждой матрицы в этом массиве и сохранить результат в виде другого трехмерного массива, содержащего эти корни.

Я сделал следующее (Пример для shape (2,2,2)):

import numpy as np
import scipy.linalg

matrices = np.array([
    [
        [1, 0],
        [0, 1]
    ],
    [
        [33, 24],
        [48, 57]
    ],
])

# Finding roots
roots = []
for i in range(np.size(matrices[:,0, 0])): 
    root = scipy.linalg.sqrtm(matrices[i,:, :])
    roots.append(root)
roots = np.array(roots)

И получил вывод

roots

array([[[1., 0.],
        [0., 1.]],

       [[5., 2.],
        [4., 7.]]])

... что прекрасно, но медленно, если в массиве много матриц (например, форма равна (3000, n, n)). Есть ли более эффективный способ сделать это?

...