1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】ValueError: 入力配列を形状 (224,224,3) から形状 (224,224) にブロードキャストできませんでした。)

2022-01-11 20:38:32

質問

test_listという名前のリストがあります。

len(test_list) = 9260  
temp_list[0].shape = (224,224,3)  

以下のコードを実行すると

x = np.array(test_list)  

私は、エラーを取得します。

ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)  

解決方法は?

リスト内の少なくとも1つの項目が3次元でないか、その2次元または3次元が他の要素と一致しません。1次元だけが一致しない場合、配列はまだ一致しますが、個々のオブジェクトとして、新しい(4次元の)配列に調整する試みは行われません。以下にいくつかの例を示します。

つまり、問題のある要素の shape != (?, 224, 3) ,
または ndim != 3 (を含む)。 ? は非負の整数である)。
これがエラーになる原因です。

リストを4次元(または3次元)配列に変換できるようにするには、この点を修正する必要があります。コンテキストがないと、3Dアイテムから1次元を失うのか、2Dアイテムに1次元を追加するのか(最初のケース)、2次元または3次元を変更するのか(2番目のケース)を判断することができないのです。


以下はエラーの例です。

>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,224))]
>>> np.array(a)
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)

または、入力の種類が違うのに、同じエラーが発生する。

>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,224,13))]
>>> np.array(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)

または、似たようなものですが、エラーメッセージが異なります。

>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((224,100,3))]
>>> np.array(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (224,224,3) into shape (224)

しかし、以下のようにすると、(おそらく)意図した結果とは異なるものの、動作します。

>>> a = [np.zeros((224,224,3)), np.zeros((224,224,3)), np.zeros((10,224,3))]
>>> np.array(a)
# long output omitted
>>> newa = np.array(a)
>>> newa.shape
3  # oops
>>> newa.dtype
dtype('O')
>>> newa[0].shape
(224, 224, 3)
>>> newa[1].shape
(224, 224, 3)
>>> newa[2].shape
(10, 224, 3)
>>>