【问题标题】:Compiling function with Numba is not working使用 Numba 编译功能不起作用
【发布时间】: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_CholeskyS0 以及 d 应该是什么?请提出一个最小的完整可重现代码。

标签: python numpy numba


【解决方案1】:

查看docs for "Cannot unify" problems,可以翻译

Cannot unify array(float64, 2d, C) and int64 for 'Z.2'...

由于“Numba 找不到可以安全地表示数组(float64, 2d, C)和整数的类型”。

这发生在这里:

if control == (False, 0):
    Z = np.random.randn(N_data, d)
else:
    Z = control[1]

在第一种情况下,您分配一个浮点数组,在第二种情况下,您分配一个整数。

后来,当尝试使用 Z 时,JIT 编译器不知道如何编译 np.dot(corr_Cholesky, Z.T).T

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多