【发布时间】:2021-06-03 17:19:24
【问题描述】:
我是 Numba 的初学者,我想优化返回两个 numpy 数组的代码:
@jit(nopython=True) def payoff_derivative(N_data, control=(False, 0)): if control == (False, 0): Z = np.random.randn(N_data, d) else: Z = control[1] W = np.dot(corr_Cholesky, Z.T).T S = S0*np.exp((r-0.5*sigma**2)*T + sigma*np.sqrt(T)*W) if type_product == "basket call": payoff = np.maximum((1/d)*np.sum(S, axis=1) - K, 0) elif type_product == "worst of put": payoff = np.maximum(K - np.min(S, axis=1), 0) elif type_product == "binary": payoff = G*((1/d)*np.sum(S, axis=1) >= K) if control == (False, 0): return Z, (payoff - np.mean(payoff))/np.std(payoff) else: return Z, payoff
这是我尝试时的错误消息:
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Cannot unify array(float64, 2d, C) and int64 for 'Z.2', defined at <ipython-input-15-15c401d7c3d7> (9)
File "<ipython-input-15-15c401d7c3d7>", line 9:
def payoff_derivative(N_data, control=(False, 0)):
<source elided>
W = (np.dot(corr_Cholesky, Z.T).T).astype('float64')
^
During: typing of assignment at <ipython-input-15-15c401d7c3d7> (9)
File "<ipython-input-15-15c401d7c3d7>", line 9:
def payoff_derivative(N_data, control=(False, 0)):
<source elided>
W = (np.dot(corr_Cholesky, Z.T).T)
^
这似乎是类型错误,但我不明白它的确切来源和原因,因为 Numba 支持 Numpy 数组。
谁能解释一下这个错误?非常感谢您的帮助!
【问题讨论】:
-
corr_Cholesky和S0以及d应该是什么?请提出一个最小的完整可重现代码。