簡體   English   中英

如何在Python中執行向量化運算?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM