1. ホーム
  2. python

[解決済み] numpy 配列連結エラー。0-d配列は連結できません。

2022-01-28 14:20:02

質問

2つのnumpy配列を連結しようとしているのですが、このようなエラーが発生しました。このエラーが何を意味するのか、どなたかヒントをいただけないでしょうか?

    Import numpy as np
    allValues = np.arange(-1, 1, 0.5)
    tmp = np.concatenate(allValues, np.array([30], float))

そして、次のようになりました。

ValueError: 0-d arrays can't be concatenated

もし私が

    tmp = np.concatenate(allValues, np.array([50], float))

エラーメッセージはありませんが、tmp変数にも連結が反映されていません。

解決方法は?

引数に、連結したい配列をシーケンス(通常はタプルかリスト)にする必要があります。

tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])

をチェックします。 ドキュメント について np.concatenate . 最初の引数は配列のシーケンス(リスト、タプルなど)であることに注意してください。これは ではなく を別々の引数として受け取る。

私の知る限り、このAPIはnumpyのすべての連結関数で共有されています。 concatenate , hstack , vstack , dstack および column_stack はすべて1つの主引数を取り、それは配列のシーケンスであるべきです。


このようなエラーが発生するのは、配列もシーケンスであることが原因です。しかし、これはつまり concatenate が解釈しているのは allValues を、連結する配列の列として扱います。しかし allValues は配列ではなく浮動小数点数であるため、0次元の配列として解釈されます。エラーにあるように、これらのquot;array"は連結することができません。

の第2引数(オプション)として受け取られます。 concatenate で、これが連結する軸となります。これは、第2引数の要素が1つであり、整数としてキャストできるため、有効な値であることに起因しています。もし、第2引数にもっと多くの要素を持つ配列を入れたら、別のエラーが出たでしょう。

a = np.array([1, 2])
b = np.array([3, 4])
np.concatenate(a, b)

# TypeError: only length-1 arrays can be converted to Python scalars