Как предложено в предыдущем ответе, вы можете изменить расположение вашей памяти.Простой способ сделать это в 2d - это просто транспонировать матрицу:
import numpy as np
r = np.random.rand(100, 10)
np.cov(r).shape # is (100,100)
np.cov(r.T).shape # is (10,10)
Но вы также можете указать флаг rowvar
.Прочитайте об этом здесь :
import numpy as np
r = np.random.rand(100, 10)
np.cov(r).shape # is (100,100)
np.cov(r, rowvar=False).shape # is (10,10)
Я думаю, что особенно для больших матриц это может быть более производительным, поскольку вы избегаете замены / перемещения осей.
ОБНОВЛЕНИЕ:
Я думал об этом и задавался вопросом, действительно ли алгоритм отличается в зависимости от rowvar == True
или rowvar == False
.Ну, как оказалось, если вы измените флаг rowvar
, numpy просто транспонирует сам массив: P.
Смотрите здесь .
Итак, в терминахпроизводительности ничего не изменится между двумя версиями.