1. ホーム
  2. python learning

Pythonライブラリ問題初級編 - 解決策:numpy frombuffer - AttributeError: 'str' object has no attribute '__buffer__'

2022-02-20 04:55:13

最近、pythonの基本構文の学習が終わったところです。記載されているpythonの学習計画によると、Pythonの基本構文を学んだ後、pythonのライブラリを学ぶ必要があり、そのライブラリには主に次の3つが含まれています。

現在ちょうどnumpyに切り替え、学習でオンラインブログに基づいている、現在.frombuffer関連のコードでnumpyの実装で問題が発生した、例。

  1. import numpy as np 
    s = 'Hello World' 
    a = np.frombuffer(s, dtype = 'S1') 
    print(a)
    

以下の問題が発生しました。

traceback (most recent call last):
  ファイル "D:/pyworkspace/bag learn/item.py", 行 11, in <module>
    a = np.frombuffer(s, dtype='S1', offset=1)
AttributeError: 'str' オブジェクトには '__buffer__' という属性がありません。

回避策として、PY3ではデフォルトでユニコードであるbを文字列の前に付けることが見つかりました。bはバイト文字列の作成と表示に使用されます。

2行目の前に

s = b 'Hello World' and you're done, or use a list to slice and dice the string, as follows.

  1. 81]: np.array(list('hello'))

  2. アウト[81]。

  3. array(['h', 'e', 'l', 'o'],dtype='<U1')

  4. 82] で:np.array(b'hello')

  5. アウト[82]。

  6. array(b'hello',dtype='|S5')

  7. 83]: np.array(list(b'hello'))

  8. Out[83]: array([104, 101, 108, 108, 111])

  9. In [85]: np.fromiter('hello','S1')

  10. アウト[85]。

  11. array([b'h', b'e', b'l', b'o'],dtype='|S1')

  12. 86] では、np.fromiter('hello','U1') です。

  13. アウト[86]。

  14. array(['h', 'e', 'l', 'o'],dtype='<U1')*)