2017-02-10 20 views
1

機能common_precisionは、2つのnumpy配列、たとえばxyを取ります。私は彼らが同じで最高の精度であることを確認したい。 dtypesのリレーショナル比較は私が欲しいものに何かをするようだが、:より高い精度のタイプを選択する

  1. 私はそれが実際にそれは私が、私は同意するかどうかわからないんだけど、そのnumpy.int64 < numpy.float16、考えて
  2. を比較するのか分かりません

    def common_precision(x, y): 
     if x.dtype > y.dtype: 
      y = y.astype(x.dtype) 
     else: 
      x = x.astype(y.dtype) 
     return (x, y) 

編集:kennytmの答えに おかげで、私はnumpyののfind_common_typeは、私が望んでいたまさにないことがわかりました。


    def common_precision(self, x, y):   
     dtype = np.find_common_type([x.dtype, y.dtype], []) 
     if x.dtype != dtype: x = x.astype(dtype) 
     if y.dtype != dtype: y = y.astype(dtype)  
     return x, y 

答えて

0

x.dtype > y.dtypeので、y.dtypecan be casted tox.dtype&& x.dtype != y.type)を意味する:

>>> numpy.dtype('i8') < numpy.dtype('f2') 
False 
>>> numpy.dtype('i8') > numpy.dtype('f2') 
False 

float16とInt64のは、単に非相溶性です。

>>> numpy.dtype('f2').kind 
'f' 
>>> numpy.dtype('f2').itemsize 
2 
>>> numpy.dtype('i8').kind 
'i' 
>>> numpy.dtype('i8').itemsize 
8 

などの情報を抽出し、これに基づいて比較スキームを決定することができます。

+0

これは私の質問を完全には解決しませんでしたが、あなたの答えとあなたのリンクが正しいパスになりました。ありがとう! –

関連する問題