Numpy: npyio.loadtxtは、str dtypeが指定されている場合でも、バイトキャストテキストファイル入力です。

作成日 2012年11月08日  ·  11コメント  ·  ソース: numpy/numpy

環境

  • Python:OS X Mountain Lionのバージョン3.3(python.orgリリース)
  • numpy:gitmasterから複製

次のように文字列を含むファイルでnumpy.loadtxtを呼び出す場合:

import numpy as np
datestxt = np.loadtxt("NYSE_dates.txt", dtype=str)
print(datetxt)

NYSE_dates.txtが単に日付のリストである場合(実際には何でもかまいません):

7/5/1962
7/6/1962
7/9/1962
...
12/29/2020
12/30/2020
12/31/2020

出力は次のとおりです。

["b'7/5/1962'" "b'7/6/1962'" "b'7/9/1962'" ..., "b'12/29/2020'"
 "b'12/30/2020'" "b'12/31/2020'"]

ご覧のとおり、 convcompat.asbytesごとに、 str(str('12/31/2020').encode('latin1'))から同じ結果が得られるため、すべての文字列はバイトキャストされ、 convを介して文字列化されています。 compat.asbytes

コードを見ると、たとえばsplit_line(...)ように、すべての文字列がasbytes(...)バイトキャストされているように見えます。したがって、これはモジュール内のすべてのルーチンが壊れていることを意味するはずです。

00 - Bug numpy.lib

最も参考になるコメント

これが5年間修正されていないことはかなり衝撃的です

全てのコメント11件

私もその問題を抱えています。 これは非常に迷惑です。 基本的に、Python3ではloadtxtを使用できません。

一時的な解決策:loadtxtメソッドのすべてのasbytes()呼び出しを削除しました。

ええ、コードを調べたときに何かが怪しいと思ったのを覚えています。

ちなみに、datetime64入力で同じ問題が発生し、 Error parsing datetime string "b'2013-01-02'"という形式の解析エラーが発生しました。 これを回避するには、その列のコンバーターを作成する必要がありました。

def decoder(input_bytes):
    return input_bytes.decode("ascii")

これは本番コードでは問題ありませんが、トレーニング資料としては非常にきれいではありません...

1.11にプッシュオフ。

回避策-最初にファイルに対してiconvを実行します。

1.12にプッシュオフ。

これは進められているようですが、これは対処すべきバグであり、修正は簡単に実装できるようです。

これが5年間修正されていないことはかなり衝撃的です

これはNumPy1.13.3で期待どおりに機能しているように見えます(ただし、どのPRで修正されたかはわかりません)。 この問題を解決できますか?

>>> import io
>>> import numpy as np
>>> f = io.StringIO("7/5/1962\n7/6/1962\n")
>>> np.loadtxt(f, dtype=str)
array(['7/5/1962', '7/6/1962'],
      dtype='<U8')
>>> np.__version__
'1.13.3'

#8033に対応して、これは#8349で修正されたようです。

閉鎖。 必要に応じて再度開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価