【问题标题】:Issues appending numpy arrays during for loop在 for 循环期间附加 numpy 数组的问题
【发布时间】:2017-03-23 19:04:15
【问题描述】:

我现在有点迷茫。我正确初始化了一个空的 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)

【问题讨论】:

  • 来自 numpy.append 文档:'axis : int, optional 附加值的轴。如果未给出axis,则arr和values在使用前都被展平'
  • 你检查过 dt.predict(X_test) 的形状了吗?
  • 最好避免使用 append。相反,只需将每个数组添加到 python 列表中,然后在最后使用 np.vstack 或 np.hstack 将它们展平为单个数组。
  • @MaartenFabré 它是 (9649, ) 我试图将轴更改为 1,但出现此错误:ValueError: all the input arrays must have same number of dimensions
  • @Erotemic,我不确定我是否完全理解您的建议,但我想保持 Preds 二维。最后,我想查看每一列中的预测,看看哪些预测最常发生。如果数组是二维的,那会更容易

标签: python arrays numpy


【解决方案1】:

如果Preds 是 (9649,10),那么你可以做两种连接中的一种

 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 个参数而不是列表,并确保第二个参数是数组。将标量添加到一维数组比用于通用连接更好。

确保您了解数组的形状和维数。

一个不错的选择是附加到一个列表

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

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

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2021-05-19
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多