2012-10-01 51 views
0

假設您有一個返回表的行的生成器。可以這樣使用的東西:將稀疏格式轉換爲數組numpy

for (labels, value) in rows: 
    pass 

「labels」長度爲n,並且爲簡單起見,它們都是字符串。 「價值」就像浮動數字一樣。

是否有一種快速,最好或內置的方式來散列標籤,並最終得到一個n維值數組和n個列表,告訴您如何將標籤值映射到索引?我想你可以將它存儲在一個recarray中?我一直這樣做,但它總是會被丟掉一些代碼。我想找到或創造更多可重用的東西。

我會很高興與 (('here', 'there', 'nowhere'), 1.234)被映射到results['here']['there']['nowhere'] = 1.234results[12,3,45] = 1.234(並具有相應的列表中給出的標籤向下在每一維的軸。)

我大概可以寫發生器轉換到稀疏格式和使用scipy,但這似乎是一個骯髒的方式來做一些相對簡單的事情。

我看到很多類似的冠冕堂皇的問題,但沒有一個完全回答這個問題。也許我錯過了一個搜索短語。

回答

0

你可以嘗試使用結構數組:

result = np.fromiter(your_generator, dtype=[('labels', '|S10'), ('value', float)]) 

您可以檢索標籤的ndarrayresult['labels'](和值result['value'],當然)。

請注意,您可以存儲多個條目中相同的標籤(前提是你總是有相同數量的),如

result = np.array([(('a','b','c'), 1.23),(('a','c','d'), 2.34)], 
        dtype=[('label', ("|S10", 3)), ('value', float)]) 

其中每個單獨的記錄是作爲一個元組,和三個「標籤」作爲一個元組本身的記錄。您也可以命名每一個「標籤」分別使用定製的D型,例如:

dtype=[('label',[('A','|S10'),('B','|S10'),('C','|S10')]),('value',float)] 

通過這種方式,你可以訪問所有的A通過result['label']['A'] ...

+0

這只是回到了我已經有了。 ..我不想散列列,我想散列行。我會更新這個問題。我不認爲我很清楚。 – mathtick

相關問題