HOWTO · Python

Valueerror: 예상되는 2d 배열, 대신 1d 배열이 있음

Python에서는 함수에서 1차원 배열을 전달할 때 예상되는 2D 배열 대신 1D 배열을 얻었지만 함수에 2차원 배열이 필요하므로 2D 배열을 전달하는 대신 단일 차원으로 배열을 전달하는 경우 오류가 발생합니다. .

이 페이지의 내용

아시다시피, 모든 프로그래밍 언어는 많은 오류에 직면합니다. 일부는 런타임에, 일부는 컴파일 시에 발생합니다. Python은 numpy 라이브러리를 사용할 때 때때로 배열 오류가 발생합니다.

numpy에서 2차원 배열 대신 1차원 배열을 전달하면 ValueError: Expected 2D array, got 1D array instead 오류가 발생합니다.

Python의 Numpy 배열

Numpy는 배열 및 수학 연산을 다루는 오픈 소스 라이브러리입니다. Python에는 배열의 목적을 제공하는 목록이 있지만 numpy 제작자는 목록보다 50x 빠른 배열을 증명한다고 주장합니다.

numpy 배열을 사용하는 핵심 목적 중 하나입니다.

Python에서 Numpy 배열 만들기

numpy 배열의 구문은 간단합니다. numpy 라이브러리를 프로그램으로 가져와 그에 따라 사용해야 합니다.

# Python 3.x
import numpy as np

# creating a numpy array
array1 = np.array([2, 4, 6])
print(array1)

출력:

#Python 3.x
[2 4 6]

Python에서 ValueError 예상 2D 배열, 대신 1D 배열의 원인

이 오류는 함수에서 1차원 배열을 전달할 때 발생합니다. 그러나 함수는 2차원 배열이 필요하므로 2D 배열을 제공하는 대신 단일 차원의 배열을 전달했습니다.

주로 predict() 메서드에서 기계 학습 알고리즘을 사용하여 발생합니다.

이제 이 시나리오를 살펴보겠습니다.

# Python 3.x
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 3.x
ValueError: Expected 2D array, got 1D array instead:
array=[0.7 1.1].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Python에서 ValueError: 예상 2D 배열, 대신 1D 배열 수정

데이터에 이중 대괄호 사용

아래에서는 이전 예제의 오류를 해결했습니다. 오류를 수정하는 가장 간단한 방법은 차원 배열을 2차원 배열로 변환하는 것입니다.

predict() 메서드에 전달할 때 [0.7,1.10]을 다른 대괄호로 묶어 2D 배열로 변환할 수 있습니다.

예제 코드:

# Python 3.x
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 3.x
[1]

reshape()을 사용하여 배열 모양 변경

1D 배열을 2D로 변환하는 또 다른 방법은 reshape() 메서드를 사용하여 배열을 재구성하는 것입니다. reshape() 메서드를 사용하여 Python에서 배열의 형태를 변경할 수 있습니다.

각 차원의 요소 수는 배열의 모양을 결정합니다. 모양 변경을 사용하여 배열 차원을 추가하거나 제거할 수 있습니다.

다음 코드에서 reshape() 메서드를 사용하기 전과 후의 numpy 배열의 크기를 볼 수 있습니다.

예제 코드:

# Python 3.x
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))

출력:

#Python 3.x
Dimension before: 1
Dimension now: 2
Classifier Result: [1]