2

float64 型の 2 つの ndarray を比較すると、そのうちの 1 つが空で、bool の空の配列が得られます。

x = np.array([1.0,2.1]) #dtype is float64
y = np.array([])        #dtype is float64

x==yの dtype を持つ空の ndarray を返しますbool

ただし、 type の 2 つの ndarray を比較するとint32、そのうちの 1 つが空で、False になります。

a = np.array([1,2])
b = np.array([], dtype='int32')

a==bFalse を返します

何を与える?返される型が異なるのはなぜですか? 私がやろうとしているのは、 type の 2 つの ndarray を比較することですfloat64

これは、python 2.6.4、numpy 1.6.1、Windows XP で行われています。

編集:「やろうとしているのは、タイプ 'float5' の 2 つの ndarray を比較することです」 -> 「タイプ 'float64' の 2 つの ndarray を比較しようとしています」.

4

1 に答える 1

1

ではまず、

a = np.array([1,2])
b = np.array([], dtype='int32')

a必ずしも int32 配列であるとは限りません。マシンのネイティブの整数型に依存します。再現できないため、空のブール配列の動作を説明できません。

さて、「タイプの 2 つの ndarray を比較する」とはどういう意味float64ですか? それらを比較して、それらが同じ形状であるかどうか、およびすべての要素が同じであるかどうかを確認しますか? ==これは、いくつかの理由で使用するのは悪い考えです。

1 つには、2 つが同じ形状である場合の結果はブール値ではなく、ブール値の配列になります。少なくともnp.all()、結果の配列を呼び出したいと思うでしょう。

また、いずれかの配列が浮動小数点計算の結果である場合、浮動小数点の丸め誤差のために、それらは実質的に等しいかもしれませんが、正確には等しくないかもしれません。np.allclose(a1, a2)関数はこの場合のために設計されています (キーワード引数を指定して許容レベルを変更できます) 。False2 つの配列の形状が異なる場合も、正常に戻ります。

于 2012-05-02T21:25:03.230 に答える