1. ホーム
  2. プログラミング言語
  3. パイソン

TypeError: flexible type solutionでreduceを実行できない。

2022-01-21 23:55:50
  1. for i in all_data[600000]:
  2. close_price_list.append(i['close'])
  3. for j in range(len(close_price_list)):
  4. if 2*N+j > len(close_price_list): # Passes validation, index is correct
  5. continue
  6. else:
  7. temp_sigma = np.std(close_price_list[N+j:2*N+j]) # correct index by verification
  8. sigma_list.append(temp_sigma)
  9. print(sigma_list)

このコードを説明すると、黄色で示した行でエラーが報告されます。

私はforループを使って、価格の文字列を持つリスト型である変数jを取得しています。このリスト価格の標準偏差を取得したい np.std()

しかし、常にエラーが報告されます。

  1. File "versions2.py", line 155, in Creat_std
  2. temp_sigma = np.std(close_price_list[N+j:2*N+j]) # correct index by verification
  3. File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\fromn
  4. 3075, in std
  5. **kwargs)
  6. File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\meth
  7. 5, in _std
  8. keepdims=keepdims)
  9. File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\meth
  10. 2, in _var
  11. arrmean = umr_sum(arr, axis, dtype, keepdims=True)
  12. TypeError: cannot perform reduce with flexible type

解決策

すべてが正しいデータであること、リストの種類が正しいことを確認した上で。

リストの要素が数値型ではなく、文字列型のため、np.std()関数がエラーを報告していたことがわかりました。

このエラーが報告されるのは

close_price_list.append(i['close'])

に修正されました。

close_price_list.append(float(i['close']))

瞬時に解決する