【发布时间】:2014-09-05 14:38:40
【问题描述】:
从here 跟进,我得到了如下代码:
@jit(float_[:,:,:](float_[:,:], int_[:], int_))
def train_function(X, y, H):
# do lots of stuff, including setting the arrays g and g_per_round like this:
g = np.zeros((no_features, no_classes))
g_per_round = np.zeros((H, no_features, no_classes))
# do more stuff, then:
g_h = None
j = 0
print "Calculating regression coefficients per class. .."
# building the parameters per j class
for y1_w in zip(z.T, weights.T):
y1, w = y1_w
temp_g = sm.WLS(y1, X, w).fit() # Step 2(a)(ii)
if g_h is None: # sometimes g *is* None, and that's fine
g_h = temp_g.params # this is an array of floats
else:
g_h = np.c_[g_h, temp_g.params]
j = j + 1
if np.allclose(g,0) or g is None:
g = g_h
else:
g = g + g_h
# do lots more stuff, then finally:
return g_per_round
class GentleBoostC(object):
# init functions and stuff
def train(self, X, y, H):
self.g_per_round = train_function(X, y, H)
现在我收到以下错误:
@jit(float_[:,:,:](float_[:,:], int_[:], int_))
more lines, etc etc etc, last few lines:
unresolved_types, var_name)
File "C:\Users\app\Anaconda\lib\site-packages\numba\typesystem\ssatypes.py", line 767, in promote_arrays
assert_equal(non_array_types[0])
File "C:\Users\app\Anaconda\lib\site-packages\numba\typesystem\ssatypes.py", line 764, in assert_equal
var_name, result_type, other_type))
TypeError: Arrays must have consistent types in assignment for variable 'g': 'float64[:, :]' and 'none'
在尝试添加 @jit 以加快我的代码速度之前,我实际上对此没有任何问题。
【问题讨论】:
-
看起来
g_h是None。如果您的for循环从未被输入,那么g_h可能不会被设置为任何内容。 -
为什么不输出
z或weights?如果其中任何一个为空,则永远不会进入您的for循环。 -
我刚刚编辑了代码以在 g 为空时为其分配一些值。另外 - 我确实尝试输出权重和 z,但问题是 - 这些不是运行时错误。我认为这些是 numba 包中的编译错误,甚至在代码开始运行之前。我认为的问题是将一个无的变量分配给一个不是无的变量。在 Numba 中难道就没有这个吗?
-
啊,我明白了。尝试将
g_h初始化为np.zeroes而不是None。 -
就是这样!谢谢。你可以把它作为答案。
标签: python numpy types numba numba-pro