我一般都对python和numpy很新,所以我不知道发生了什么。我有很多数据存储在变量X
X.shape = (N,1)
中。
我看起来像这样:
X = np.genfromtxt("data.txt",delimiter=',');
# Running X.shape gives me (45000L,1L)
Yhat = np.zeros((X.size,25))
# Running Yhat.shape gives me (45000L,25L)
learner = [None] * 25
for i in range(0,25):
learner[i] = treeRegress(X,dY)
Yhat[:,i] = learner[i].predict(X)
dY = dY * Yhat[:,i] * i
基本上,dY
将在循环的每次迭代中发生变化。对于learner
的每个索引,我们将得到一个新结果。然后,我的predict
函数会预测X
中每个值的值,然后将每个值分配给Yhat
,这会将此预测值放入行值i
的行中。
目前,这给了我一个错误:
Yhat[:,i] = learner[i].predict(X)
ValueError: could not broadcast input array from shape (45000,1) into shape (45000)
执行learner[i].predict(X).shape
会返回(45000,1)
并执行Yhat[:,i].shape
会返回(45000,)
。所以我理解为什么我不能这样做。不幸的是,如果我使用:
learner[i] = treeRegress(X,dY)
Yhat[:,i] = np.ravel(learner[i].predict(X))
这实际上使用了我的所有内存并使我的计算机崩溃,所以我无法做到这一点。
另外,我需要将它存储在一列中的原因是因为最终我想以如下间隔计算总和:
for i in [1,5,10,25]:
ysum = sum(Yhat[:,0:i])
print ysum
所以基本上我希望能够迭代一定的列间隔。那么,我做错了什么?或者我还需要其他方法来构建这些数组吗?我应该如何将数据分配到我想要的列中,而不是我周围的一切都崩溃和燃烧?