2017-02-24 12 views
0

私は.datから作業している小さなプロジェクトの一部として大きな配列を読み込もうとしています。大きなデータファイルを読み込むためにNumpyを使用していますか?

私は通常私のファイルであった場合、単一の列アレイを形成するために私のファイルからデータを読み込むためにnumpy.loadtxtを使用

:3を割り当てるには

x, y, z = np.loadtxt("123.dat", Unpack =True) 

:私が使用

1 2 3 
1 2 3 
1 2 3 

を列1,2および3に配列します。私が扱っているファイルは次の形式です。

0000000000 4.975124E-03 -3.046211E+00 -1.148806E+00 
0000000001 2.543665E-06 -3.661235E+00 -1.038111E+00 
0000000002 2.543665E-06 -1.285855E+01 1.251881E+00 

この形式は、ファイル内で約52k行にわたって繰り返されます。 しかし、私は同じ方法を使用しようとすると、次のを使用してみてください。

i, m, x, y = np.loadtxt("stars.dat", unpack=True) 

次のエラーが発生します。

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    i, m, x, y = np.loadtxt("stars.dat") 
ValueError: too many values to unpack (expected 4) 

私はusecols =(1,2 ...)しかし、これは行列に正しく値を収集することはありませんに引数を変更しようとしましたが、それが整列されていない私のファイルからランダムな値を選択し、列に

このエラーを解決する方法と、Numpyを使用してファイルから大きなデータセットをインポートし、今後それらをアレイに割り当てる正しい方法は何ですか?

答えて

0

サンプルは4つの変数に期待どおりに展開する必要があります。そのファイルについて何か違うものがなければなりません。エラーは、4つ以上の列を検出していることを示します。 usecolsの問題はさらに、ファイル内のカラムの概念がloadtxtのものと異なることを示しています。デリミタに問題がある可能性があります。あなたのサンプルと

In [114]: txt=b"""0000000000 4.975124E-03 -3.046211E+00 -1.148806E+00 
    ...: 0000000001 2.543665E-06 -3.661235E+00 -1.038111E+00 
    ...: 0000000002 2.543665E-06 -1.285855E+01 1.251881E+00""" 

In [119]: data=np.loadtxt(txt.splitlines()) 
In [120]: data.shape 
Out[120]: (3, 4) 
In [121]: data.dtype 
Out[121]: dtype('float64') 

平野負荷が3行、4列を検索します。このような単純な読み込みを行い、ファイルを正しく読み込んでいることを確認することをお勧めします。

In [122]: data=np.loadtxt(txt.splitlines(), unpack=True) 
In [123]: data.shape 
Out[123]: (4, 3) 
In [124]: i,j,k,l=data 

その後、後で展開することができます。

unpackはちょうど配列を転置します。 Unpackingは、変数の組に対する通常のPythonの割り当てです。 loadtxtは、unpackとは特別なことをしません。

関連する問題