1

テキスト ファイルから構築された NumPy 配列があります。私はこの方法で何週間もやっていますが、これまでにこの問題を見たことはありません。

print data
print data[:, 1:]

出力

[['1', '200', '300', '400', '500\n']
 ['3', '500', '400', '200', '1000\n']
 ['14', '900', '200', '300', '100\n'] ...,
 ['999142', '24', '21', '20', '12\n']]
Traceback (most recent call last):
File ...., line ..., in ....
print data[:, 1:]
IndexError:  too many indices

なぜこれが起こっているのですか、どうすれば修正できますか?

編集:大きな手がかり。 には2 番目の値data.shapeはありません。(3313869,)

data.ndimです1

len(data[1])ただし、 は 5 です。

編集、私はそれを構築しています

data = [re.split(' ', line) for line in f]
f.close()
data = np.array(data)

割り込むと

f.close()
print data[0:10]

それはすなわち

[['1', '200', '300', '400', '500\n'], ['3', .... ]]

4

2 に答える 2

1

あなたのコードがどういうわけかnumpy.arrayオブジェクトの を作成しているため、問題が発生しました。同様の問題でこの質問を参照してください。それが起こると、次のようなものが得られます。

a = numpyp.array([list1, list2, list3, ... , listn], dtype=object)

これは 1D 配列ですが、印刷を要求すると、__str__内部の各リストの が呼び出され、次のようになります。

[[ 1, 2, 3, 4],
 [ 5, 6, 7, 8]]

これは2D配列のようです。

次のようにしてシミュレートできます。

a = ['aaa' for i in range(10)]
b = numpy.empty((5),dtype=object)
b.fill(a) 

チェックしましょうb

b.shape # (5,)
b.ndim  # 1

しかし、print b与える:

[['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']]

かなりトリッキー...

于 2013-06-11T18:17:13.543 に答える
0

私はこれを解決しました

for line in data:
          if (len(line) != 5):
                  print len(line)
                  print line

私のデータのいくつかの行の末尾にスペースがあり、それが原因500\n別々のトークンに分割されていました。金曜日にこのコードを最後にいじったとき、特定の値が欠落している行に対してこのスクリプトの入力ファイルを作成するデフォルトオプションをPythonスクリプトに追加し、Vimがスペースを挿入したため、これが忍び寄りましたの直前の文字にたまたまあったライン ラップのトークン\n

[re.split(' ', line.replace('\n', '').rstrip()) for line in f]欲望の結果を与える。

NumPy が配列を 1 次元と 2 次元の両方として扱う (data[1]行として選択できるようにする) のは少し奇妙だと思いますが、行の長さが一貫していない場合は、 2 次元配列ではなく配列の配列であり、この 2 つを区別します。

于 2013-06-10T20:44:20.920 に答える