2014-11-08 110 views
-5

我是python的初學者我將如何去做轉換值的下面。是否有可用的數組的變形?在Python中轉換數組

# values = [[0, 1], [2, 3]] to [[0, 2], [1, 3]] 

回答

4

這可以通過使用numpy的的transpose()功能,可縮寫爲T來完成:

In [5]: values = np.array([[0, 1], [2, 3]]) 

In [6]: values.T 
Out[6]: 
array([[0, 2], 
     [1, 3]]) 
+0

+1,經常發生最好的答案有更少的選票 – 2014-11-08 20:08:31

3

你不需要numpy的,對列表的泛型列表:

>>> a = [[1,2,3],[4,5,6]] 
>>> b = zip(*a) 
>>> print b 
[(1, 4), (2, 5), (3, 6)] 
+2

現在,這是一個很好的使用'zip'! – lejlot 2014-11-08 19:54:15

+0

對numpy數組的效率比使用.t的效率低-1 OP特別要求一個numpy的解決方案*是否有可用的數組的numpy轉換?這也創建了元組 – 2014-11-08 20:08:04

+0

當然,但問題沒有顯示任何代碼片段一個兩個正常列表的聲明 - 我推斷user1741339認爲你需要使用numpy來轉置,我試着提供一個更一般的答案。 – igon 2014-11-08 20:15:01

0

或者你可以簡單地使用任務。

>>> values[0][1], values[1][0] = values[1][0], values[0][1] 
>>> values 
[[0, 2], [1, 3]] 
1

爲什麼MattDMo的解決方案是迄今爲止最好的一個numpy的數組:

In [36]: values = np.array([range(1000), range(1000)]) 

In [37]: timeit zip(*values) 
10000 loops, best of 3: 120 µs per loop 

In [38]: timeit values.T 
10000000 loops, best of 3: 196 ns per loop 

In [39]: type(values.T) 
Out[39]: numpy.ndarray 


In [40]: type(zip(*values)) 
Out[40]: list 

要獲得列出的名單,而不是元組,你就需要調用地圖或等價的:

In [50]: timeit map(list,zip(*values)) 
1000 loops, best of 3: 360 µs per loop 

所以明顯更慢,更重要的是你不再有一個numpy數組。

+0

謝謝,先生。有一個upvote :) – MattDMo 2014-11-09 05:27:54