将压缩迭代器分离成单个迭代器?

时间:2014-09-05 12:11:43

标签: python for-loop numpy iterator numba

我的代码有两个2D numpy数组,zweights。 我正在这样迭代它们(转置它们时):

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,所以我只是想知道这是不是最好的方法呢?或者,如果还有另一种更优化的方式?

1 个答案:

答案 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.Tweights.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()