0

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

4

1 回答 1

0

看起来 Numba 不支持assignment unpacking 。分配给一个目标,然后处理元组中的两个索引:

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()
于 2014-09-05T12:14:24.427 回答