2017-04-08 135 views
1

我有一個numpy的數組,如下所示:添加一個新的數組多維數組在Python

np.array([ 
[23, 12, 4, 103, 87, 0.6], 
[32, 18, 3, 120, 70, 0.6], 
[43, 12, 8, 109, 89, 0.4], 
[20, 13, 7, 111, 77, 0.8] 
]) 

我想要改造這個數組,其中最後一欄變成了自己的陣列,這樣它會看起來像這樣:

np.array([ 
[[23, 12, 4, 103, 87], [0.6]], 
[[32, 18, 3, 120, 70], [0.6]], 
[[43, 12, 8, 109, 89], [0.4]], 
[[20, 13, 7, 111, 77], [0.8]] 
]) 

什麼是最好的方式去做這件事?我對Python比較陌生,嘗試過一些循環,但無濟於事。謝謝!

+0

這似乎是你真正想要的是一個'list',而不是'np.array' –

回答

1

numpy要求其數組中一致的維數;這會給兩種不同的尺寸。您可以使用兩個單獨的變量(即平行排列):

X = data[:, :-1] 
y = data[:, -1] 

X = np.array([ 
[23, 12, 4, 103, 87], 
[32, 18, 3, 120, 70], 
[43, 12, 8, 109, 89], 
[20, 13, 7, 111, 77], 
]) 


y = np.array([ 
0.6, 0.6, 0.4, 0.8 
]) 

或者你可以存儲對的列表:

my_list = [(row[:-1], [row[-1]]) for row in data] 
my_list = [ 
([23, 12, 4, 103, 87], [0.6]), 
([32, 18, 3, 120, 70], [0.6]), 
([43, 12, 8, 109, 89], [0.4]), 
([20, 13, 7, 111, 77], [0.8]) 
] 

最好的策略取決於你的使用情況。

+0

這個問題不是一個*確切*重複,所以這裏有一些額外的見解:http:// stackoverflow .com/questions/3386259/how-to-make-a-multidimension-numpy-array-with-a-varying-row-size –

+0

我試過使用它,但它並沒有將最後一列作爲它自己的數組。這是我得到的: [ ([23,12,4,103,87],0.6), ([32,18,3,120,70],0.6), ([43,12,8 ([20,13,7,111,77],0.8) ] – himi64

+0

確保包含括號:[row [-1]]。他們很關鍵。 –