1. ホーム
  2. プログラミング言語
  3. パイソン

リストのインデックスを取得する際にエラーが発生しました。'ValueError: shape mismatch: Objects cannot be broadcast to a single shape'.

2022-01-22 06:51:35
<パス

最近、コードを変更しているときに落とし穴があり、タイトルのようなエラーが報告されました。
"ValueError。 形状 mismatch: オブジェクトを1つのshapeにブロードキャストすることはできません".
エラーを報告するスニペットはかなり長く、元のスニペットでエラーを報告する部分は、2つのデータ型( numpy )を新しいリストに入れ、後でリスト内の2つのデータ型のインデックス値を使う必要があり、それを直接取得しようとするとエラーが発生するので、その問題を解決する簡単なスニペットを書いただけです。

import numpy as np

a = [0, 1, 2]
a = np.array(a)
b = [0, 2, 3]
c = [a, b]
for i in c:
    print(c.index(i))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

実行すると、エラー "ValueError: shape mismatch: objects cannot be broadcast to a single shape" が報告されます。Baiduにも同様のエラーメッセージがありましたが、私が遭遇したものとは異なり、データの次元の不一致によるものがほとんどでした。
実際、コード・スニペットから、aとbはリストとnumpy形式の配列という2つの異なるタイプであることがわかります。もちろん、リストは異なるデータ型の要素を同時に格納することができますが、同じリストで異なる型の要素のインデックスを取得することも同様に可能であるという考えで自分を混乱させてしまいました。実際はそうではなく、私が示したスニペットのように、リスト内のインデックスを取得する際に異なるデータ型は間違うことになります。
というスニペットに修正すると。

import numpy as np

a = [0, 1, 2]
a = np.array(a).tolist()
b = [0, 2, 3]
c = [a, b]
for i in c:
    print(c.index(i))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

つまり、aのデータ型をnumpy.arrayからlistに変更してデータ型を統一し、その時点で問題が解決し、出力が得られます。

0
1

リストで異なるデータ型のインデックスを付けるとなぜエラーになるのか、具体的に理解できていませんが、大御所の方からの訂正を歓迎します。