如您所知,每种编程语言都会遇到很多错误,有些是在运行时,有些是在编译时。 Python 在使用 numpy 库时有时会遇到数组错误。
当我们在 numpy 中传递一维数组而不是二维数组时,会发生错误 ValueError: Expected 2D array, got 1D array instead 。
Python 中的 Numpy 数组
Numpy 是一个处理数组和数学运算的开源库。 在 Python 中,列表向我们提供了数组的用途,但 numpy 的创建者声称他们证明数组比列表快 50 倍。
这是使用 numpy 数组的核心目的之一。
在 Python 中创建一个 Numpy 数组
numpy 数组的语法很简单。 我们必须将 numpy 库导入您的程序并相应地使用。
import numpy as np
# creating a numpy array
array1 = np.array([2,4,6])
print(array1)
输出:
[2 4 6]
Python 中错误 ValueError: Expected 2D array, got 1D array instead 的原因
当您在函数中传递一维数组时会发生此错误。 但是,该函数需要一个二维数组,因此您传递的不是一个二维数组,而是一个单一维度的数组。
它主要发生在 predict()
方法中使用机器学习算法。
现在让我们来看看这个场景。
import numpy as np
from sklearn import svm
X = np.array([[2,1],
[4,5],
[2.6,3.5],
[6,6],
[0.8,1],
[7,10]])
y = [1,0,1,0,1,0]
classifier = svm.SVC(kernel="linear", C = 1.0)
classifier.fit(X,y)
print(classifier.predict([0.7,1.10]))
输出:
修复 Python 中错误 ValueError: Expected 2D array, got 1D array instead
对数据使用双方括号
下面我们已经解决了前面例子中的错误。 修复错误的最简单方法是将维数组转换为二维数组。
我们可以将 [0.7,1.10]
括在另一个方括号中,以便在将其传递给 predict()
方法时将其转换为二维数组。
示例代码:
import numpy as np
from sklearn import svm
X = np.array([[2,1],
[4,5],
[2.6,3.5],
[6,6],
[0.8,1],
[7,10]])
y = [1,0,1,0,1,0]
classifier = svm.SVC(kernel="linear", C = 1.0)
classifier.fit(X,y)
print(classifier.predict([[0.7,1.10]]))
输出:
[1]
使用 reshape() 重塑数组
将一维数组转换为二维数组的另一种方法是使用 reshape()
方法重塑数组。 您可以使用 reshape()
方法在 Python 中重塑数组。
每个维度中元素的数量决定了数组的形状。 您可以使用重塑来添加或删除数组维度。
在下面的代码中,您可以看到使用 reshape()
方法前后 numpy 数组的维度。
示例代码:
import numpy as np
from sklearn import svm
X = np.array([[2,1],
[4,5],
[2.6,3.5],
[6,6],
[0.8,1],
[7,10]])
y = [1,0,1,0,1,0]
classifier = svm.SVC(kernel="linear", C = 1.0)
classifier.fit(X,y)
test=np.array([0.7,1.10])
print("Dimension before:", test.ndim)
test=test.reshape(1, -1)
print("Dimension now:", test.ndim)
print("Classifier Result:", classifier.predict(test))
输出:
Dimension before: 1
Dimension now: 2
Classifier Result: [1]