我的代码有两个2D numpy数组,z
和weights
。
我正在这样迭代它们(转置它们时):
import statsmodels.api as sm
import numpy as np
for y1, w in zip(z.T, weights.T): # building the parameters per j class
temp_g = sm.WLS(y1, iself.X, w).fit()
这很好,直到我开始使用Numba来加速我的代码。有了Numba,我收到了这个错误:
numba.error.NumbaError: (see below)
--------------------- Numba Encountered Errors or Warnings ---------------------
for y1, w in zip(z.T, weights.T): # building the parameters per j class
------------^
Error 82:12: Only a single target iteration variable is supported at the moment
--------------------------------------------------------------------------------
要解决这个问题,我想我可以这样做:
for y1 in z.T:
for w in weights.T:
temp_g = sm.WLS(y1, iself.X, w).fit()
但我还不太擅长python,所以我只是想知道这是不是最好的方法呢?或者,如果还有另一种更优化的方式?
答案 0 :(得分:0)
看起来Numba不支持分配解包。分配给一个目标,然后解决元组中的两个索引:
for y1_w in zip(z.T, weights.T):
temp_g = sm.WLS(y1_w[0], iself.X, y1_w[1]).fit()
此处y1_w
是一个包含z.T
和weights.T
的配对元素的元组,因此是两个元素的元组。您可以使用索引来处理每个元素。
你可以 在循环体中的for
语句之外使用赋值解包:
for y1_w in zip(z.T, weights.T):
y1, w = y1_w # unpack the zip pair 'manually'
temp_g = sm.WLS(y1, iself.X, w).fit()