[英]How to perform vectorized operations in Python?
我的簡單代碼有一個問題,它可能是抵押計算器,其中所有利率從0.03到0.18都列在了表中。 這是我的代碼和錯誤。
l = 350000 #Loan amount
n = 30 #number of years for the loan
r = [0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18] #interest rate in decimal
n = n * 12
a = l
int1 = 12
u = [x / int1 for x in r]
D = (((u+1)**n)-1) /(u*(u+1)**n)
z = (a / D)
print(z)
File "test.py", line 23, in <module>
D = (((u+1)**n)-1) /(u*(u+1)**n)
TypeError: can only concatenate list (not "int") to list
謝謝
問題是u
是一個列表,不能用於計算D
正在執行的矢量化操作。 您可以將列表轉換為NumPy數組,以使代碼正常工作。
u = np.array([x / int1 for x in r])
另外,您可以使用for循環或列表推導將u
每個元素的D
存儲為
D = [(((i+1)**n)-1) /(i*(i+1)**n) for i in u]
但這將在z = (a / D)
期間再次抱怨,因為D
仍然是列表。 因此,轉換為數組似乎是一種方便的方法。
另一個替代答案是直接使用列表推導來計算z
而不涉及額外的變量D
z = [a / (((i+1)**n)-1) /(i*(i+1)**n) for i in u]
您面臨的當前錯誤是因為u是一個列表(通過list comprehension生成 ),而D嘗試在u(一個列表)和數字之間執行數學運算。 那行不通。
嘗試這個:
import numpy as np
u = np.array([x / int1 for x in r])
你將是一個NumPy數組 ,它允許你用它做向量數學。 如果您從未使用過numpy模塊,則可以使用pip軟件包管理器輕松安裝。 如果未安裝,則
import numpy as np
會引發錯誤,並且您將無法使用NumPy數組。 如果您發現自己經常做類似的工作,則可能值得安裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.