2013-08-27 2 views
4

У меня есть массив, как следующие,Изменение формы numpy.array в Fortran-прилежащей порядке

from numpy import * 
a=array([1,2,3,4,5,6,7,8,9]) 

Я хочу, чтобы получить результат, как следующее

[[1,4,7],[2,5,8],[3,6,9]] 

Потому что у меня есть большой массив. Поэтому мне нужен эффективный способ сделать это. И лучше переделать его на место.

+0

если вы используете Фортран заказа, не знают, что почти все, что вы делаете с массивом в Fortran-порядке возвращает результат в С-порядке (и, возможно, сначала даже транс формы до C-порядка, прежде чем делать что-то с ним), но было бы интересно узнать, что вы можете или хотите ускорить с ним – usethedeathstar

ответ

5

В соответствии с предложением @ atomh33ls, вы можете использовать Reshape проходящее order='F', и «если возможно» Возвращаемый массив будет только видом исходной, без копируемых данных, например:

a=array([1,2,3,4,5,6,7,8,9]) 
b = a.reshape(3,3, order='F') 

a[0] = 11 

print b 
#array([[ 1, 4, 7], 
#  [ 2, 5, 8], 
#  [ 3, 6, 9]]) 
4

Вы можете использовать reshape и изменить параметр порядка на FORTRAN (столбцам) порядке:

a.reshape((3,3),order='F') 
Смежные вопросы