我的程序使用遺傳技術來構建等式。Python:「不支持的操作數類型爲+:'long'和'numpy.float64'」
它將字符串隨機組合成一個未知的等式。
"(((x + 1) * x)/(4 * 6) ** 2)"
一個字符串的是: 「math.factorial(random.randint(1,9))」
所以方程通常是這樣的:
「(((x + 1) * x)/(4 * 6) ** 2) + math.factorial(random.randint(1,9))
」
生成50個不同的方程,然後根據
分配一個適應值,它們在一定範圍的值上近似於sin函數。
for x in numpy.arange(1,6.4,.1):
fitness += abs(eval"(((x + 1) * x)/(4 * 6) ** 2) + math.factorial(random.randint(1,9)) - numpy.sin(x))")
該程序經常會拋出一個異常,這是由'除了TypeError'條款捕獲。 錯誤消息是 「不支持的操作數類型+: '長' 和 'numpy.float64'」
當我嘗試 「型(numpy.sin(1))」,它返回
類型:numpy的。 float64
如何讓'long'和'numpy.float64'操作數類型一起工作? 任何幫助,將不勝感激。
@catchmeifyoutry:好主意!不幸的是,這是一個等式。我從來沒有
試圖採取一個這麼長的分開。我想知道是否有解析實用程序來幫助
解決所有括號。 (((math.factorial(random.randint(1,9)))) - (((x)+(((math.factorial(random.randint(1,9))))** ** ** ** - ((math.factorial(random.randint(1,9))))) - (((6.0)/(((8.0)/(((3.0) - (8.0))/(((5.0)*(( 2.0)/(x)))/(8.0))))+(4.0)))/(8.0))))+(7.0)))
我會嘗試捕捉x的值它失敗了。
恢復良好,到目前爲止彼得。順便說一句,你說「類型(numpy.sin(1))」返回numpy.float64 ...可能是一個紅色的鯡魚。嘗試「type(x)」,在循環中...你會看到x也是一個numpy.float64。也許知道這將幫助你找到與真正長期不匹配的地方。 – 2009-12-10 01:37:35
@彼得漢森:謝謝彼得,我會研究一下 – 2009-12-10 02:57:40