2017-02-24 4 views
0

私はthis responseを見て、集計された表示ではなく配列全体を印刷するようnumpyを試してみましたが、動作していないようです。numpyは完全ではない(配列は無限大)

名前付きヘッダーを持つCSVがあります。ここに最初の5行があります

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

最後の行は何を示していますか? 'genfromtxt'が正しければ、3行5列だけです。 – 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行を印刷しようとすると想像できません!私はそれをless/moreにパイプし、選択された行を見ながらスクロールします。しかし全部? – hpaulj

1

あなたの例では区切り文字として '、'を使用しないので、配列を取得することに驚いています。しかし、あなたのサンプルファイルにカンマを含めるのを忘れたかもしれません。

私はcsvデータを扱う場合、pandasのDataFrame機能を使用します。これはフードの下でnumpyを使用するので、すべてnumpy操作はpandas DataFramesで動作します。

パンダには、テーブルのようなデータで操作するための多くのトリックがあります。

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 

これはxための内部ストレージは、あなたがx.tostring()で「見る」ことができます山車のバッファ(である。作成し、それをフォーマットする必要がありxを印刷するには

>>> print(repr(x)) 

と同じですrepr(x)の結果は、文字列1850000文字(25000行)です。これは21秒です。これを画面に表示するには、端末のスクロール速度だけで制限されます。

詳細は見ていませんが、numpyの書式設定はほとんどがPythonで書かれており、コンパイルされていないと思います。スピードよりも柔軟性を重視して設計されています。配列の10〜100行を見たいのは普通です。 25000行が異常な場合です。

やや不思議、CSVとしてこの配列を書くのは、最小限の遅延で、速いです:

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

そして私はsavetxtが何を知っている - それは、行の上に反復して、ファイルが

f.write(fmt % tuple(row)) 
を書くん

明らかに、通常のreprのすべての鳴き声は高価です。要約すると、多くの次元を扱うことができ、複雑なdtypeなどを扱うことができます。既知の固定形式の各行を単純にフォーマットすることは、時間のかかる作業ではありません。

実際には、savetxtルートがより便利で速いかもしれません。表示形式を制御することができ、結果として得られるテキストファイルをエディタや端末ウィンドウで余暇で見ることができます。あなたは端末ウィンドウのスクロールバッファによって制限されません。しかし、このsavetxtファイルは元のファイルcsvとはどのように違うのですか?

+0

ありがとう、私はそれをシンプルに保つために努力していたが、多分あなたの考えは同様にうまくいくかもしれない。 – vashts85

関連する問題