2012-03-25 2 views
0

у меня есть NumPy массив как следующийотделяя mutidimensional массив NumPy питона

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

......... ] 

Поэтому в основном я хочу создать 4 (могут быть разными) списки, где

list_1 = [1,5...], list_2 = [2,6....] and so on. 

Что такое вещий способ сделай это?

ответ

2

дан Numpy массиву

>>> numpy.array([[x for x in xrange(i,i+5)] for i in xrange(0,100,10)]) 
array([[ 0, 1, 2, 3, 4], 
     [10, 11, 12, 13, 14], 
     [20, 21, 22, 23, 24], 
     [30, 31, 32, 33, 34], 
     [40, 41, 42, 43, 44], 
     [50, 51, 52, 53, 54], 
     [60, 61, 62, 63, 64], 
     [70, 71, 72, 73, 74], 
     [80, 81, 82, 83, 84], 
     [90, 91, 92, 93, 94]]) 

Вы сначала transpose это

>>> narray=numpy.array([[x for x in xrange(i,i+5)] for i in xrange(0,100,10)]) 
>>> tarray=numpy.transpose(narray) 
array([[ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90], 
     [ 1, 11, 21, 31, 41, 51, 61, 71, 81, 91], 
     [ 2, 12, 22, 32, 42, 52, 62, 72, 82, 92], 
     [ 3, 13, 23, 33, 43, 53, 63, 73, 83, 93], 
     [ 4, 14, 24, 34, 44, 54, 64, 74, 84, 94]]) 

, а затем преобразовать в list

>>> larray=tarray.tolist() 
>>> larray 
[[0, 10, 20, 30, 40, 50, 60, 70, 80, 90], [1, 11, 21, 31, 41, 51, 61, 71, 81, 91], [2, 12, 22, 32, 42, 52, 62, 72, 82, 92], [3, 13, 23, 33, 43, 53, 63, 73, 83, 93], [4, 14, 24, 34, 44, 54, 64, 74, 84, 94]] 

теперь вы можете индекс larray, как larray[0], larray[1], чтобы получить индивиды l списки.

+0

идеальный .. спасибо – Fraz

+1

Если йо u're довольны элементами, хранящимися в массиве 1D numpy, вы можете просто индексировать транспонированный массив, например: 'tarray [n]' для n-го столбца. Если вам действительно нужен каждый элемент в списке, вы можете преобразовать его по мере необходимости: 'list (tarray [n])' –

+1

Использование транспонирования для получения столбца немного непрозрачно. Нарезка (как описано [@Anthony Kong] (http://stackoverflow.com/a/9858902/709852)) является более прозрачным способом сделать это. Как и выше, если вы действительно хотите, чтобы это было как список, то вроде 'list_n = list (a [,, n])' для n-го столбца (где 'a' - массив numpy). –

2

Учитывая это

>>> a = array([[1,2,3,4], [5,6,7,8], [9, 10,11,12]]) 
>>> a 
array([[ 1, 2, 3, 4], 
     [ 5, 6, 7, 8], 
     [ 9, 10, 11, 12]]) 

вы можете использовать slicing

>>> list1 = a[:,0] 
>>> list1 
array([1, 5, 9]) 
>>> list1 = a[:,1] 
>>> list1 
array([ 2, 6, 10]) 
1
a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] 
list1=[] 
list2=[] 
list3=[] 
list4=[] 
for x in a: 
    for i,y in enumerate(x): 
     if i==0: 
      list1.append(y) 
     elif i==1: 
      list2.append(y) 
     elif i==2: 
      list3.append(y) 
     elif i==3: 
      list4.append(y) 


>>> print(list1) 
[1, 5, 9, 13] 

>>> print(list2) 
[2, 6, 10, 14] 

>>> print(list3) 
[3, 7, 11, 15] 

>>> print(list4) 
[4, 8, 12, 16] 

Динамически:

>>>a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] 
>>>list=[[] for _ in range(len(a))] 
>>>for x in a: 
    for i,y in enumerate(x): 
     list[i].append(y) 
>>>print(list) 
[[1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15], [4, 8, 12, 16]] 
+0

, хотя это не удастся, если число списков больше 4 .. недостаточно динамическое – Fraz

+1

Фактически я не читал эту часть ** (хочу создать 4 (может отличаться)) ** вопроса. Теперь я написал динамическое решение. –

Смежные вопросы