25

大きなテキスト ファイル (3*10^6 行と 10 ~ 100 列の約 1 GB) を、文字列を含む 2D np 配列として読み込みたいと思います。ただし、 numpy.loadtxt() はデフォルトとして浮動小数点数のみを取るようです。配列全体に別のデータ型を指定することは可能ですか? 私は運なしで次のことを試しました:

loadedData = np.loadtxt(address, dtype=np.str)

次のエラー メッセージが表示されます。

/Library/Python/2.7/site-packages/numpy-1.8.0.dev_20224ea_20121123-py2.7-macosx-10.8-x86_64.egg/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)
    833             fh.close()
    834
--> 835     X = np.array(X, dtype)
    836     # Multicolumn data are returned with shape (1, N, M), i.e.
    837     # (1, 1, M) for a single row - remove the singleton dimension there

ValueError: cannot set an array element with a sequence

何か案は?(ファイルの正確な列数は事前にわかりません。)

4

4 に答える 4

51

genfromtxt代わりに使用してください。これは、次の方法よりもはるかに一般的な方法ですloadtxt

import numpy as np
print np.genfromtxt('col.txt',dtype='str')

ファイルの使用col.txt:

foo bar
cat dog
man wine

これは与える:

[['foo' 'bar']
 ['cat' 'dog']
 ['man' 'wine']]

各行の列数が同じであると予想される場合は、最初の行を読み取り、filling_values欠落している行を修正する属性を設定します。

于 2013-02-20T16:50:59.723 に答える
2

NumPy 配列が必要であることは必須ですか? それ以外の場合は、ネストされたリストとしてデータをロードすることで速度を上げることができます。

def load(fname):
    ''' Load the file using std open'''
    f = open(fname,'r')

    data = []
    for line in f.readlines():
        data.append(line.replace('\n','').split(' '))

    f.close()

    return data

4000x4000 ワードのテキスト ファイルの場合、これは より約 10 倍高速ですloadtxt

于 2013-02-21T14:56:03.380 に答える