ですから、私はPythonに非常に精通しており、自分が書いたmatlabコードを複製して学習しようとしています。matlabで、タブ区切りのデータファイルをロードする部分があります。構文
x = load(data.txt)
タブで区切られたデータを取得し、xというラベルの付いた行列のセルに配置します。
Pythonでこれを行う方法はありますが、コンマ区切りのデータを使用しますか?
いくつかの方法がありますが、アプリケーションに最も適した方法を選択してください。
numpyを使用している場合は、前処理後にファイルが適切な構造にロードされるため、numpyの、、、または関数を使用することをお勧めしload
ます。loadtxt
fromfile
genfromtxt
しかし、numpy(またはいくつかのファイル読み込み機能を備えた他の大きなライブラリ)を使用する予定がない場合は、ファイルを読み込むためだけにそれを使用するのはやり過ぎでしょう...組み込みのPython関数またはcsvの使用を検討してください代わりに標準ライブラリのモジュール...それははるかに柔軟で、はるかにスムーズになります。
file.txt
(各行の値はタブで区切られています)を使用した例を使用すると、次のようになります。
1 2 3 4
7 8 9 10 11 12
13 14 15
インポートするモジュールがなく、非常に簡単で柔軟性があり、ほとんどの状況に適したオプションです。
rb
組み込み関数のみを使用して、テーブル(値のリストのリスト、タブでファイルに区切られている)の読み取り(フラグ)のためにファイルをバイナリモードでロードします。
>>> file = open('file.txt', 'rb')
>>> table = [row.strip().split('\t') for row in file]
標準ライブラリのcsvモジュールも非常に簡単です。
CSVはカンマ区切り値を意味しますが、実際には標準がなく、任意の区切り文字を選択できることに注意してください。したがって、CSVは、すべてのセル指向またはテーブルのようなファイルを表します。
rb
csvを使用してテーブル(値のリストのリスト、タブでファイルに区切られている)の読み取り(フラグ)のためにファイルをバイナリモードでロードしますreader
。
>>> import csv
>>> file = open('file.txt', 'rb')
>>> data = csv.reader(file, delimiter='\t')
>>> table = [row for row in data]
テーブルは前の2つの例と同様にロードされており、テーブルのデータには次のようにアクセスできますtable[row][col]
。
>>> table
[['1', '2', '3', '4'], ['7', '8', '9', '10', '11', '12'], ['13', '14', '15']]
>>> table[0]
['1', '2', '3', '4']
>>> table[1][2]
9
MATLABのような目的でPythonを使用している場合は、NumPy(およびscipy)を使用する必要があります。特に、MATLABユーザー向けのNumPyを読む必要があります。
カンマ区切りのデータがある場合は、numpy.loadtxt
それを読み取るために使用できます(もちろん、numpyをインストールした後)。
$ cat matrix.csv
1,2,3
4,5,6
7,8,9
その後
>>> import numpy as np
>>> m = np.loadtxt("matrix.csv", delimiter=",")
>>> m
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> np.matrix(m)
matrix([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
numpy.loadtxt関数は、ASCIIファイルからnumpy配列にデータを読み取ります。値を区切るために使用される文字列は、区切り文字引数を使用して定義できます。
numpy.loadtxt('data.txt', delimiter=',')
より複雑なケースでは、このnumpy.genfromtxt
関数は非常に優れた代替手段です。
標準ライブラリにはcsvモジュールがあります。
>>> import csv
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|')
>>> for row in spamReader:
... print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
csvモジュール(具体的にはreader
クラス)および/またはnumpy.loadtxt関数を参照してください。