6

多くの行と列のデータと整数値を含むリストを含む .txt ファイルがあるとします。リスト内の整数に一致する行番号をテキスト ファイルにロードするにはどうすればよいですか?

説明のために、整数のリストがあるとします。

a = [1,3,5]

テキスト ファイルから行 1、3、および 5 だけを配列に読み込むにはどうすればよいですか?

numpy の loadtxt ルーチンを使用すると、行をスキップして特定の列を使用できます。しかし、(間違った構文を無視して)次の行に沿って何かを行う方法を見つけることができないようです:

new_array = np.loadtxt('data.txt', userows=a, unpack='true')

ありがとうございました。

4

5 に答える 5

5

このファイルを考えると:

1,2,3
4,5,6
7,8,9
10,11,12
13,14,15
16,17,18
19,20,21

csv モジュールを使用して、目的の np 配列を取得できます。

import csv
import numpy as np

desired=[1,3,5]
with open('/tmp/test.csv', 'r') as fin:
    reader=csv.reader(fin)
    result=[[int(s) for s in row] for i,row in enumerate(reader) if i in desired]

print(np.array(result))   

版画:

[[ 4  5  6]
 [10 11 12]
 [16 17 18]]
于 2013-09-24T23:58:57.680 に答える
1

loadtxtファイルパスの代わりにジェネレーターオブジェクトを関数に渡す必要があることを除いて、numpy のメソッドを使用することに固執することができます。

最初に、ファイル名と行インデックスを受け入れ、指定されたインデックスの行のみを生成するジェネレーターを定義します

def generate_specific_rows(filePath, userows=[]):
    with open(filePath) as f:
        for i, line in enumerate(f):
            if i in userows:
                yield line

loadtxtこれで、ジェネレーター オブジェクトを作成してメソッドに渡すことができます。

a = [1,3,5]
gen = generate_specific_rows('data.txt', userows=a)
new_array = np.loadtxt(gen, unpack='true')
于 2020-04-15T16:36:08.847 に答える
0

line.split ()の代わりに使用することをお勧めしますline.strip()。 コマンドを使用してline.split ()簡単に変換できるリストを返します。numpy.arraynp.asarray

于 2017-05-26T10:34:39.190 に答える