我有一個像下面分離mutidimensional陣列numpy的蟒蛇
[[ 1 2 3 4 ]
[ 5 6 7 8 ]
......... ]
一個numpy的陣列所以基本上我想創建4(可以是不同的)名單,其中
list_1 = [1,5...], list_2 = [2,6....] and so on.
什麼是Python的方式來做這個?
我有一個像下面分離mutidimensional陣列numpy的蟒蛇
[[ 1 2 3 4 ]
[ 5 6 7 8 ]
......... ]
一個numpy的陣列所以基本上我想創建4(可以是不同的)名單,其中
list_1 = [1,5...], list_2 = [2,6....] and so on.
什麼是Python的方式來做這個?
給出一個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]
得到individua l列表。
鑑於這種
>>> 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])
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]]
雖然這會失敗,當列表的數量超過4 ..不夠動態 – Fraz 2012-03-25 09:42:09
其實我沒有閱讀這部分**(想創建4(可以不同))的問題**。現在我也寫了一個動態解決方案。 – 2012-03-25 11:18:15
完美..感謝 – Fraz 2012-03-25 08:46:17
如果喲對於存儲在一維numpy數組中的元素感到滿意,您可以將轉置數組索引,如:第n列的'tarray [n]'。如果你真的想要列表中的每個元素,可以根據需要將其轉換:'list(tarray [n])' – 2012-03-25 09:26:49
使用轉置獲取列有點不透明。切片(如[@Anthony Kong](http://stackoverflow.com/a/9858902/709852)所述)是一種更加透明的方法。如上所述,如果你真的想把它作爲一個列表,就像'list_n = list(a [:,n])'第n列(其中'a'是numpy數組)。 – 2012-03-25 09:33:45