2017-02-24 45 views
0

我看過this response試圖讓numpy打印完整的數組而不是總結視圖,但它似乎並沒有工作。numpy將不打印完整(unsummarized陣列)

我有一個CSV與命名標題。這裏是前五行

v0 v1 v2 v3 v4 
1001 5529 24 56663 16445 
1002 4809 30.125 49853 28069 
1003 407 20 28462 8491 
1005 605 19.55 75423 4798 
1007 1607 20.26 79076 12962 

我想讀取數據並能夠完整地查看它。我試過這樣做:

import numpy as np 
np.set_printoptions(threshold=np.inf) 

main_df2=np.genfromtxt('file location', delimiter=",") 
main_df2[0:3,:] 

但是,這仍然返回截斷數組,並且性能似乎大大減慢。我究竟做錯了什麼?

+1

最後一行顯示什麼?那只有3行和5列,如果'genfromtxt'是正確的。 – hpaulj

回答

0

當我在這裏複製並粘貼數據時,它在Excel中打開,但文件是CSV。

我在做課堂練習,我們必須使用numpy。有一兩件事我注意到的是,該結果爲科學記數法相當潦草的感謝,所以我做了以下和事情更加順暢:

np.set_printoptions(threshold=100000, suppress=True)

的壓制聲明救了我很多的格式。當我將threshold更改爲'nan'inf之類的東西時,性能確實會受到很大影響,我不知道爲什麼。

+0

這個文件有多大?頁面和頁面的行? – hpaulj

+0

25,000行,所以我不希望它在Python中很慢?或者在Python中是典型的?我的其他編程經驗在R. – vashts85

+0

我無法想象嘗試打印(寫入屏幕)25000行的任何東西!我可能會將它拖到更少/更多,並滾動查看選定的行。但是整件事情呢? – hpaulj

1

我很驚訝你得到一個數組,因爲你的例子不使用','作爲分隔符。但也許你忘了在你的示例文件中包含逗號。

如果我使用csv數據,我會使用pandas的DataFrame功能。它在底層使用numpy,因此所有numpy操作都可以在熊貓DataFrame上運行。

熊貓有許多操作表格數據的技巧。

import pandas as pd 

df = pd.read_csv('nothing.txt') 
#============================================================================== 
# next line remove blanks from the column names 
#============================================================================== 
df.columns = [name.strip(' ') for name in df.columns] 

pd.set_option('display.height', 1000) 
pd.set_option('display.max_rows', 500) 
pd.set_option('display.max_columns', 500) 
pd.set_option('display.width', 1000) 

print(df) 
+0

當我複製並粘貼數據時,它在Excel中打開,但文件是CSV。 – vashts85

+1

我明白了。 Excel做了很好的格式。 「pandas」的方法有效嗎? – Henning

1

OK,在常規的Python會話(我一般用的IPython代替),我設置打印選項,並做了一個大陣:

>>> np.set_printoptions(threshold=np.inf, suppress=True) 
>>> x=np.random.rand(25000,5) 

當我執行的下一行,它花費約21秒格式化數組,然後將結果字符串寫入屏幕(使用比適合終端的窗口緩衝區更多的行)。

>>> x 

這是一樣的

>>> print(repr(x)) 

x內部存儲是浮動的緩衝區(你可以「看」與x.tostring()。打印x它必須格式化,創建多行字符串,其中包含每個數字的打印表示,全部爲125000個字符,repr(x)的結果是一個字符串,長度爲1850000 char long,行數爲25000行,這是21秒的時間,屏幕上的顯示只受終端滾動速度的限制。

我沒有看過細節,但我認爲numpy格式主要是用Python編寫的,而不是編譯的。它的設計靈活性高於速度。想要查看10-100行數組是正常的。 25000行是一種不尋常的情況。

有些奇怪的是,寫這個陣列爲CSV快,以最小的延遲:

>>> np.savetxt('test.txt', x, fmt='%10f', delimiter=',') 

而且我知道什麼savetxt那樣 - 它遍歷行上,並沒有寫入文件

f.write(fmt % tuple(row)) 

顯然,所有常規repr的鈴鐺都很昂貴。它可以總結,它可以處理很多維度,它可以處理複雜的dtypes等等。簡單地用已知的固定格式格式化每一行不是耗時的步驟。

實際上,savetxt路線可能更有用,也更快。您可以控制顯示格式,並且可以在編輯器或終端窗口中隨時查看生成的文本文件。您不會受到終端窗口的滾動緩衝區的限制。但這savetxt文件將如何不同於原來的csv

+0

謝謝,我試圖保持簡單,但也許你的想法也可能工作。 – vashts85