Диагонализация массива двумерных массивов - PullRequest
0 голосов
/ 20 июля 2011

Мне нужно по диагонали очень большое количество матриц.Эти матрицы сами по себе довольно малы (скажем, axa, где a <= 10), но из-за их огромного числа, их диагонализация занимает много времени, используя цикл for и функцию <code>numpy.linalg.eig.Поэтому я хотел создать массив матриц, то есть массив двумерных массивов, но, к сожалению, Python, похоже, считает это трехмерным массивом, запутывается и отказывается выполнять работу.Итак, есть ли способ помешать Python рассматривать этот массив 2D-массивов как 3D-массив?

Спасибо,

Новичок в Python

РЕДАКТИРОВАТЬ: чтобы быть болееясно, меня не интересует этот массив 3D per se .Поскольку, в общем, подача массива в функцию кажется намного быстрее, чем использование цикла for для подачи всех элементов один за другим, я просто попытался поместить все матрицы, которые мне нужны для диагонализации, в массив.

1 Ответ

1 голос
/ 20 июля 2011

Если у вас есть 3D-массив, такой как:

a = np.random.normal(size=(20,10,10))

, вы можете просто перебрать все 20 массивов 10x10, используя:

for k in xrange(a.shape[0]):
    b = np.linalg.eig(a[k,:,:])

, где вы сохраните b вболее изощренный способ.Это может быть то, что вы уже делаете, но вы не можете применить np.linalg.eig к трехмерному массиву и заставить его вычислять по одной оси, так что вы застряли в цикле, если не существует формализма для объединения всех ваших массивов водин 2D массив.Однако я сомневаюсь, что это будет быстрее, чем просто циклически проходить по отдельным двумерным массивам.

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