誤ったデータ型を使用して格納されたデータがあり、基礎となるデータを正しい値に再解析するのに問題があります。データポイントは実際には浮動小数点数であり、制御できないシステムには単一の整数(おそらく32ビット)として格納されます。私がアクセスできるのは単一の整数です。私はPython 2で正しい値を得るためfloat32として再解釈したいと思います。私はview()
とneworderbytes()
関数を使用していましたが、予期しない結果が出ています。numpy view()関数を使用して誤って格納されたデータを再解析する際の問題
通常の整数データは[-2147483648, 875967683, 1005249947, 1216348160]
で、-1と+1の間の浮動小数点数を返します。だから、
>>> import numpy as np
>>> si = np.array([-2147483648, 0, 875967683, 1005249947, 1084227584, 1084231267, 1112226524, 1216348160], dtype=np.int32)
>>> si.view(np.float32)
array([ -0.00000000e+00, 0.00000000e+00, 1.69692655e-07,
7.16848439e-03, 5.00000000e+00, 5.00175619e+00,
5.08074799e+01, 2.62144000e+05], dtype=float32)
>>> si.view(np.float32).newbyteorder()
array([ 1.79366203e-43, 0.00000000e+00, -1.80211731e+02,
-3.80362399e-22, 5.74868682e-41, 2.63098489e+21,
-2.09748370e+17, 4.60186416e-41], dtype=float32)
、あなたが再解釈することを参照してください。これらの制限は、浮動小数点数は、以下の例を参照してください、私が取得しています何をしている、わずかに高いまたは低いが、1E5として確かに高くはないかもしれないので、ハードではありませんデータが私の期待に合わない。さらに、私の興味をそそる整数の分布にはいくつかの特質があり、おそらく私はすべてのことを私の側でやっていると思いますが、その基礎となるデータは保管プロセスで破損していると思います。
は、ここで私が持っているものです。
Total number of integers : 321,767
Number of integers = -2,147,483,648 : 91,989
Number of integers = 0 : 163,356
Number of integers > 0 : 66,422
だから、-2147483648、唯一負の数と正確に一致したデータの重要な部分があります。半分は正確に0で、完全に細かく正常です。残りは875,967,683と1,216,348,160の間で変わっています。データをソートしてvsインデックスをプロットしたプロット(http://i.imgur.com/jJVr1t6.png)を参照してください。ヒストグラム私はヒストグラムの正規分布を期待しましたが、明らかにそうではありません。
私の基本的な質問は次のとおりです。view()
機能を正しく使用して正しい状況(データが壊れていることを意味する)にしていないか、そうではありませんか?
私は、-2,147,483,648が「Nan」を表すために使用されていると考えています。残りの数字は、オフセットとスケーリングが必要です。例えば、 'offset = 1 << 30;分母= 1 << 31;浮動小数点=(si - オフセット)/分母。 –
はい、タイプミスが修正されました。ありがとう@ PM2Ring! 'view() 'は標準的なPython関数ではなくnumpy関数であることを定義するための質問を洗練してくれてありがとう。 –
まあ、-2,147,483,648のint32の最小許容値(少なくともnumpyで)、私はそれが特別な値であることが理にかなっていることに同意します。 「ナン」はいい考えです。しかし、私は、データが異常に分散しているので、例えば、1,092,616,192と1,112,226,524の間のジャンプのため、翻訳とスケーリングが十分であるとは思わない。 –