2012-07-03 53 views
0

我想從一個相對較大的numpy數組創建一個字典。我嘗試使用字典的構造函數,像這樣:從numpy數組創建字典「ValueError:太多的值來解壓縮」

elements =dict((k,v) for (a[:,0] , a[:,-1]) in myarray) 

我假設我錯誤地這樣做,因爲我得到的錯誤:"ValueError: too many values to unpack"

的numpy的陣列看起來像這樣:

[ 2.01206281e+13 -8.42110000e+04 -8.42110000e+04 ..., 0.00000000e+00 
    3.30000000e+02 -3.90343147e-03] 

我希望第一列2.01206281e+13成爲關鍵,最後一列-3.90343147e-03成爲陣列中每一行的值

我在正確的軌道上/是否有更好的方式去做這件事?

感謝

編輯:讓我更清楚,我想的第一列是鍵,最後一列是值。我想numpy的陣列

+0

這將是有益的,讓我們知道您正在使用與NumPy陣列,以及他們的尺寸。 – msw

+0

所以你只想使用第一個和最後一個值?它們之間的值呢? –

+0

@MarcodeWit h之間的值是任意的我不需要它們該數組是從包含數據的大型文本文件中生成的 – Rtrader

回答

2

這是一個很難回答的問題,而不知道myarray究竟是什麼,但這可能會幫助你開始。

>>> import numpy as np 
>>> a = np.random.randint(0, 10, size=(3, 2)) 
>>> a 
array([[1, 6], 
     [9, 3], 
     [2, 8]]) 
>>> dict(a) 
{1: 6, 2: 8, 9: 3} 

>>> a = np.random.randint(0, 10, size=(3, 5)) 
>>> a 
array([[9, 7, 4, 4, 6], 
     [8, 9, 1, 6, 5], 
     [7, 5, 3, 4, 7]]) 
>>> dict(a[:, [0, -1]]) 
{7: 7, 8: 5, 9: 6} 
+0

非常感謝! – Rtrader

+0

+1解決它沒有適當的問題輸入數據。 –

0
elements = dict(zip(* [ iter(myarray) ] * 2)) 

在這樣做的每一行我們在這裏看到的是,我們創建基於myArray的列表上的迭代器。我們把它放在一個列表中並加倍。現在我們已經得到了一個迭代器綁定到列表中的第一個和第二個地方,我們給出了zip函數的參數,它爲dict創建者創建了一個對列表。

相關問題