np.array([0.25, np.array([0.3])])
はfloat配列の作成に失敗し、dtypeはオブジェクトになります。
これは私には間違っているようですが、意図的なものですか?
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