【问题标题】:Expected 2D array, got 1D array instead预期 2D 数组,得到 1D 数组
【发布时间】:2018-09-16 19:32:20
【问题描述】:

即使经过多次调试,我仍然收到此错误,该数组似乎是一个二维数组:

    reg = linear_model.SGDClassifier()
    X = []
    Y = []
    with open('data/legitimate.txt', 'r', encoding='utf8') as f:
        for line in f:
            X.append(get_heuristics(line))
            Y.append(0)

    with open('data/bad.txt', 'r', encoding='utf8') as f:
        for line in f:
            X.append(get_heuristics(line))
            Y.append(1)

    X = np.array(X)
    Y = np.array(Y)
    reg.fit(X, Y)

get_heuristics() 返回一维数组。为什么会发生这种情况?谢谢

【问题讨论】:

  • 数组get_heuristics 返回的大小是否不同? Numpy 只能处理子列表具有相同大小的数组。在另一种情况下,它将生成对数组的引用的一维数组,但这相同。 (在 C# 中,这将是 float[][]float[,] 之间的区别。,
  • 您没有列出错误、堆栈跟踪或行号,也没有包含“get_heuristics()”的代码
  • X 显示shapedtype。甚至可能是阵列的一部分。 Python 的一个好处是您可以交互地运行代码,并且显示值是一路走来的各个步骤。
  • @hpaulj X.shape 返回 (4000,5)Y.shape 返回 (4000,)
  • 这是 X imgur.com/a/ar3Yu 的输出,这是 Y imgur.com/a/Hi2Ff 的输出

标签: python arrays python-3.x numpy scipy


【解决方案1】:

X 数组是一个二维数组。正如您所说的,getheuristics() 返回一个一维数组,附加一个一维数组将生成一个二维数组。但是将显示错误“预期的二维数组,而不是一维数组”,因为Y 只是一维的。毕竟,您每次只是简单地附加一个数字,因此是一维数组。 Scikit-learn 的fit 需要两个二维数组。正如我确定控制台会建议的那样,您可能想尝试一下:

Y = Y.reshape(-1, 1)

在您致电reg.fit(X,Y)之前。

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 2018-12-11
    • 2019-06-06
    • 2021-05-14
    • 2021-12-28
    • 2020-11-02
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多