Valueerror: 2 次元配列が必要ですが、代わりに 1 次元配列を取得しました

Fariba Laiq 2023年6月21日
  1. Python の Numpy 配列
  2. Python で Numpy 配列を作成する
  3. Python での ValueError Expected 2D array, got 1D array instead の原因
  4. Python の ValueError: Expected 2D Array, got 1D Array instead を修正
Valueerror: 2 次元配列が必要ですが、代わりに 1 次元配列を取得しました

ご存知のように、すべてのプログラミング言語では、実行時やコンパイル時に多くのエラーが発生します。 numpy ライブラリを使用すると、Python で配列エラーが発生することがあります。

numpy で 2 次元配列ではなく 1 次元配列を渡すと、ValueError: Expected 2D array, got 1D array instead エラーが発生します。

Python の Numpy 配列

Numpy は、配列と数学演算を扱うオープンソース ライブラリです。 Python では、配列の目的を提供するリストがありますが、numpy の作成者は、リストよりも 50x 高速な配列を証明すると主張しています。

これは、numpy 配列を使用する主な目的の 1つです。

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 Expected 2D array, got 1D array instead の原因

このエラーは、関数で 1 次元配列を渡すときに発生します。 ただし、この関数は 2 次元配列を必要とするため、2 次元配列を指定する代わりに、1 次元の配列を渡しました。

ほとんどの場合、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: Expected 2D Array, got 1D Array instead を修正

データで二重角かっこを使用する

以下は、前の例のエラーを解決したものです。 エラーを修正する最も簡単な方法は、次元配列を 2 次元配列に変換することです。

[0.7,1.10] を別の角括弧で囲んで、predict() メソッドに渡すときに 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]
著者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

関連記事 - Python Error