[英]Issues appending numpy arrays during for loop
我现在有点迷路。 我正确地初始化了一个空的numpy数组,我相信我正确地使用了np.append
函数
Preds = np.empty(shape = (X_test.shape[0],10))
kf = KFold(n = X_train.shape[0], n_folds=10, shuffle = True)
for kf_train, kf_test in kf:
X_train_kf = X_train.iloc[kf_train]
Y_train_kf = Y_train.iloc[kf_train]
dt = tree.DecisionTreeClassifier(max_depth=2)
dt.fit(X_train_kf, Y_train_kf)
Preds = np.append(Preds,dt.predict(X_test))
print Preds
只是一些其他信息:
X_test的形状为(9649,24)
(运行后)Preds的形状为(192980,)
在此循环的,Preds的形状应为(9649,10)
任何建议将不胜感激。
编辑:这是更新的解决方案
Preds = []
kf = KFold(n = X_train.shape[0], n_folds=20, shuffle = True)
for kf_train, kf_test in kf:
X_train_kf = X_train.iloc[kf_train]
Y_train_kf = Y_train.iloc[kf_train]
dt = tree.DecisionTreeClassifier(max_depth=2)
dt.fit(X_train_kf, Y_train_kf)
Preds.append(dt.predict(X_test))
Preds = np.vstack(Preds)
如果Preds
为(9649,10),则可以执行2种串联操作之一
newPreds = np.concatenate((Preds, np.zeros((N,10))), axis=0)
newPreds = np.concatenate((Preds, np.zeros((9649,N)), axis=1)
第一个生成(9649 + N,10)数组,第二个生成(9646,10 + N)。
np.vstack
可用于使第二个数组为2d,即它将(10,)
更改为(1,10)
数组。 np.append
2个参数而不是列表,并确保第二个是数组。 将标量添加到1d数组要比通用级联更好。
确保您了解阵列的形状和维数。
一个不错的选择是将其追加到列表中
alist = []
alist.append(initial_array)
for ...
alist.append(next_array)
result = np.concatenate(alist, axis=?)
# vstack, stack, and np.array can be used if dimensions are right
追加到列表,最后进行一个联接比重复的串联更快。 列表旨在廉价地增长; 阵列通过制作新的更大阵列来增长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.