2016-12-20 10 views
0

numpy.allclose(a, b)を実行すると構造化配列にTypeError: invalid type promotionがスローされます。 2つの構造化配列の内容がほぼ等しいかどうかをチェックする正しい方法は何でしょうか?構造化numpy配列のnumpy.allcloseに相当するものは何ですか?

+1

関連するアレイの完全なdtypeを教えてください。 –

+0

私は任意の構造化配列のために働く解決策を探しています。 –

答えて

2

np.allcloseall()続いnp.iscloseありません。 isclose を許容範囲に対してテストし、np.nanおよびnp.infの宿泊施設を用意してください。だから、それは主に浮動小数点数を使って、そして拡張intで動作するように設計されています。

アレイはnp.isfinite(a)と同様にa-bnp.absで動作する必要があります。短いa.astype(float)であなたの配列で動作するはずです。

これは構造化配列の複合dtypeでは機能しません。配列のフィールドを繰り返し処理して、isclose(またはallclose)と比較することもできます。しかし、2つの配列がdtypesに一致することを確認し、isclose(例えば、文字列フィールド)で機能しないフィールドで他のテストを使用します。

だから、簡単な場合には

all([np.allclose(a[name], b[name]) for name in a.dtype.names]) 

は動作するはずです。

配列のフィールドがすべて同じ数値型のdtypeの場合は、配列を2次元配列として表示し、その配列に対してallcloseを実行できます。しかし、通常、構造化された配列は、フィールドが文字列、intおよびfloatの組み合わせである場合に使用されます。最も一般的なケースでは、dtypes内に複素数型の型があり、何らかの再帰的なテストが必要です。

import numpy.lib.recfunctions as rf 

には、複雑な構造化配列演算を支援する関数があります。

0

スカラーがbをされると仮定すると、あなただけのaのフィールドを反復処理することができます

all(np.allclose(a[field], b) for field in a.dtype.names) 
関連する問題