2016-12-09 2 views
1

私は多くの場合、テキストファイルに格納されたデータを[x, y, z]のような形式で扱います。 NumPy配列にデータをロードするときは、各列が異なる要素x、y、zであるテキストファイルから順序を維持すると便利です。これの欠点は、すべてのx値で動作するNumPyをデフォルトとして使用するC順序付けで、連続していないメモリブロックにアクセスすることです。 FortranのにデータをロードするNumPyはFortranの順序配列にデータを直接ロードできますか?

アレイを注文し、私は

data = numpy.asfortranarray(numpy.loadtxt('data.txt')) 

を使用することができますが、1つのラインでそれをする方法はありますか? loadtxtのマニュアルを見ると、この方法ではその機能が提供されていないようです。他のロード機能はありますか?

+0

'loadtxt'は行のメモリを割り当てることができますが、あらかじめ列のメモリを割り当てることはできませんか?だから最高のことは、配列をCの順序で読み込んでFの順に変換することです。 – Goyo

答えて

4

loadtxtgenfromtxtは、ファイルを1行ずつ読み込み、リスト(またはタプルのリスト)のリストで結果を収集します。最後に、これを配列に変換します。おおよそ:

rows = [] 
for line in f.readline(): 
    values = [float(i) for i in line.split(delimiter)] 
    rows.append(values) 
data = np.array(rows) 

あなた自身の読者を書くことができます!または、余分な後処理のビットを受け入れるだけです。それは見た目が硬くないか、または高価ではない。

+0

それは理にかなっています。本質的に、ファイルは行内に格納されているため、列メジャー配列、Fortranの順序付けを取得するには、行優先順序、C順序、および変換を使用してファイルを読み込む必要があります。 –

関連する問題