Numpy: バグ:スカラーとshape ==(1、)配列を混在させると、次元の検出に失敗します

作成日 2019年12月09日  ·  5コメント  ·  ソース: numpy/numpy

np.array([0.25, np.array([0.3])])はfloat配列の作成に失敗し、dtypeはオブジェクトになります。

これは私には間違っているようですが、意図的なものですか?

00 - Bug numpy.dtype

全てのコメント5件

Cc @nschloe 、この種のことに反対し、彼らの問題にリンクすることができます

CCingをありがとう。 うん、これは本当に私がやってきたことのように見える。 :smiley_cat: https

ここでは、オブジェクト配列を作成することが正しいことだと主張します。 結局のところ、フロートと配列を組み合わせているのです。 Pythonリストを作成した場合は、

[0.25, np.array([0.3])]

同じことを期待します。最初のエントリはfloatで、2番目のエントリは長さ1の配列です。ここで、listsとnp.arraysの動作が異なると混乱します。

また、ここで暗黙的にdtype float配列を作成すると、必要な場合でも[float, vector[1]]配列を作成できなくなります。

ほとんどの場合、 np.array([0.25, np.array([0.3])])は誤って行われ、簡単に修正できます。 たとえば、 https: //github.com/scipy/scipy/pull/11147/files#diff-21a6a0b0d89357857304bfba2da5a971L321を参照してください。 結局、

明示的は暗黙的よりも優れています。

OK、閉じます。 そのPRは、最近のNEP 34の変更(元に戻されたため)をscipyへの混乱を少なくしたでしょう。

@nschloe

ここで暗黙的にdtypefloat配列を作成すると、必要な場合でも[float、vector [1]]配列を作成できなくなります。

記録のために、あなたはnp.array(0.3, np.array([0.3]), dtype=object)することができます。

Pythonリストを作成した場合...

NumPy ndarraysは、Pythonリストとは大きく異なります。 私はそれを期待していません
np.array([0.2, 0.3, 0.4])は、dtypeにnp.float64を指定していなくても、オブジェクト配列を作成します。 したがって、ある程度の自動の値ベースのdtype検出に満足していることに同意します。 問題は、何が優先されるべきか、つまり数値型またはオブジェクト型です。

したがって、ある程度の自動の値ベースのdtype検出に満足していることに同意します。

「自動化」はここでは非常に明確だと思います。すべての入力値をキャプチャできる「最も低い」データ型を常に取得します。

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
このページは役に立ちましたか?
0 / 5 - 0 評価