2012-06-06 41 views
3

我有一個numpy直方圖,我想輸出爲製表符分隔的文本文件。我的代碼如下:numpy初學者:使用numpy.savetxt寫入數組

targethist = np.histogram(targetlist, bins=ilist) 
print targethist 
np.savetxt('ChrI_dens.txt',targethist,delimiter='\t') 

targetlist和ilist是長整型列表。我得到以下輸出:

(array([0, 0, 0, ..., 0, 0, 0]), array([ 1, 10000, 20000, ..., 15060000, 15070000, 15072422])) Traceback (most recent call last): File "target_dens_np.py", line 62, in np.savetxt('ChrI_dens.txt',targethist,delimiter='\t') File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/lib/npyio.py", line 979, in savetxt fh.write(asbytes(format % tuple(row) + newline)) TypeError: float argument required, not numpy.ndarray

看來,直方圖陣列已經創建,但我做錯了事的np.savetxt()線。我已經閱讀了文檔,但不明白爲什麼這個函數中的任何參數都期待浮動。我哪裏錯了?

回答

3

我認爲問題在於savetxt的第二個參數必須是「類似數組」的。你的輸入不是「類似數組」的。例如

print (len(targethist[0])) 
print (len(targethist[1])) 

注意長度是不一樣的?如果長度相同,numpy可以將其轉換爲單個二維數組,並且一切都會很好,但無法進行轉換,因此失敗。

這工作

np.savetxt('stuff.dat',(targethist[0],targethist[1][1:]),delimiter='\t') 

但我已經截斷你的數據)。你需要決定你想要做什麼來解決這個問題。

我必須承認,這裏的錯誤信息很神祕。

+0

現貨!無論如何,在我遇到神祕的錯誤之前,這應該發生在我身上。事實證明,我想截斷較長數組中的第一個整數,所以這是完美的。謝謝! – pandaSeq

+0

@pandaSeq我不得不承認 - 基於這個追溯,我在這個問題上撓了撓頭幾分鐘。通常,當python-numpy的問題在沒有任何答案的情況下坐在這裏超過10分鐘時,你就會知道一些有趣的事情正在發生;)。 – mgilson