1. ホーム
  2. python

[解決済み] 式をfloatに変換できない

2022-02-02 18:24:09

質問

Pythonで記号操作のイロハを学ぼうとしています(初心者です)。

次のような基本的なコードがあるのですが、出力で "式を float" に変換できないというエラーが発生します。

このコードのどこが問題なのでしょうか。

from sympy import *
from math import *

def h(x):
    return log(0.75392 * x)

x = symbols('x')
hprime = h(x).diff(x)

print(hprime)

解決方法は?

で言われていることの典型的な例です。 PEP-8 をワイルドカードのインポートについて説明します。

ワイルドカードのインポート( from <module> import * というのも、どの名前が名前空間に存在するのかが不明確になり、読者と多くの自動化ツールの両方を混乱させるからです。

で作業する必要があるのが問題です。 sympy.log クラスを使用していますが math.log 関数の代わりに float オブジェクトではなく Symbol オブジェクトになります。

と書くと

from sympy import *

をモジュールネームスペースにインポートしていることになります。 sympy パッケージがトップレベルで提供しているもの (そして多くのものがあり、その多くはまったく必要ないものです) を含んでいます。 sympy.log クラスがあります。

次のステートメントの後

from math import *

ですべてをインポートしています。 math モジュールで、その中には math.log これは、以前にインポートした sympy.log クラスがあります。

このように考えると、あなたの例は次のように書くことができます。

import sympy


def h(x):
    return sympy.log(0.485022 * x)


x = sympy.symbols('x')
h_x = h(x)
hprime = h_x.diff(x)

print(hprime)

は、私たちに

1.0/x

P. S. : を削除しました。 math インポートは、この例では使用されていません。