2015-06-13 65 views
1

我已經10×10網格的一個維位置列表:一個維點列表

[(0, 0), (0, 1), (0, 2), ..., (9, 9)] 

我想numpy的陣列是這樣的(10長度列表的列表):

array([[ (0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9) ], 
     ..., 
     [ (9, 0), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9) ]]) 

如何轉換二維np數組中的一維點列表?

我寫了這個:

import numpy as np 

l = [] 
for i in range(10): 
    for ii in range(10): 
     l.append((i, ii)) 

print(l) 
a = np.array(l) 
print(a) 
a.shape = (a.size // 10, 10) 
print(a) 

但結果不是我們所期望的:

python3.4 tmp/t.py 
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), ..., (9, 9)] 
[[0 0] 
[0 1] 
[0 2] 
[0 3] 
[0 4] 
[0 5] 
[0 6] 
[0 7] 
[0 8] 
[0 9] 
... 
[9 9]] 
[[0 0 0 1 0 2 0 3 0 4] 
[0 5 0 6 0 7 0 8 0 9] 
[1 0 1 1 1 2 1 3 1 4] 
[1 5 1 6 1 7 1 8 1 9] 
[2 0 2 1 2 2 2 3 2 4] 
... 
[9 0 9 1 9 2 9 3 9 4] 
[9 5 9 6 9 7 9 8 9 9]] 

回答

3

試試這個:

>>> z = [(i,j) for i in range(10) for j in range(10)] 
>>> z 
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), ..., (9, 9)] 
>>> np.array(z).reshape((10,10, 2)) 
array([[[0, 0], 
     [0, 1], 
     [0, 2], 
     [0, 3], 
     [0, 4], 
     [0, 5], 
     [0, 6], 
     [0, 7], 
     [0, 8], 
     [0, 9]], 

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

     ... 

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

你想numpy.reshape

>>> array = np.array(range(10)) 
>>> array.reshape(5,2) 
array([[0, 1], 
     [2, 3], 
     [4, 5], 
     [6, 7], 
     [8, 9]]) 

對於你的情況,如果你處理一個元素,你會做到以下幾點:

>>> >>> a = np.array(range(100)) 
>>> a.reshape(10,10) 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
     [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], 
     [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], 
     [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], 
     [70, 71, 72, 73, 74, 75, 76, 77, 78, 79], 
     [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], 
     [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]) 

但是,你的情況有每個元素2個元素,所以你會做:

>>> a = np.array([[i,j] for i in range(10) for j in range(10)]) 
>>> a.reshape(10,10, 2) 
-1

在我看來最Python的方式應該是這樣的:

a = [[(i,j) for j in range(10)] for i in range(10)] 
a = np.array(a) 

編輯: 如果你想保存你的元組,c heck this:

a = np.zeros(100,dtype=('i4,i4')) 
a[:] = [(i,j) for i in range(10) for j in range(10)] 
In [29]: a.reshape(10,10) 
Out[29]: 
array([[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), 
     (0, 8), (0, 9)], 
     [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), 
     (1, 8), (1, 9)], 
     [(2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), 
     (2, 8), (2, 9)], 
     [(3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), 
     (3, 8), (3, 9)], 
     [(4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), 
     (4, 8), (4, 9)], 
     [(5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), 
     (5, 8), (5, 9)], 
     [(6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), 
     (6, 8), (6, 9)], 
     [(7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), 
     (7, 8), (7, 9)], 
     [(8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), 
     (8, 8), (8, 9)], 
     [(9, 0), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), 
     (9, 8), (9, 9)]], 
     dtype=[('f0', '<i4'), ('f1', '<i4')]) 
+1

注意列表生成部分爲例。在我的代碼中,列表已經存在。 – bux

+0

然後,你應該使用上面的答案之一:) 有趣的事情,numpy不保存你的元組單元格,並將其轉換爲np.array。 –

+0

請檢查編輯。 –