for循环期间附加numpy数组的问题

时间:2016-11-09 21:02:40

标签: python arrays numpy

此刻我有点失落。我正确地初始化了一个空的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)

1 个答案:

答案 0 :(得分:0)

如果 newPreds = np.concatenate((Preds, np.zeros((N,10))), axis=0) newPreds = np.concatenate((Preds, np.zeros((9649,N)), axis=1) 是(9649,10),那么你可以做两种串联中的一种

np.vstack

第一个产生(9649 + N,10)阵列,第二个产生(9646,10 + N)。

(10,)可用于使第二个数组为2d,即它将(1,10)更改为np.append数组。 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 采用2个参数而不是列表,并确保第二个是数组。将标量添加到1d数组比通用连接更好。

确保您了解阵列的形状和尺寸数。

一个好的选择是附加到列表

Folder\Another Folder\MyAndroidProjects\...

追加到列表,最后是一个连接,比重复连接要快。列表旨在便宜地增长;通过创建一个新的更大的数组来增加数组。