dtype
numpy配列を作成するとき、私はかなり混乱しています。フロートのリストから作成しています。最初に、私がすでに行ったので、それは印刷の問題ではないことに注意させてくださいnp.set_printoptions(precision=18)
。
これは私のリストの一部です:
In [37]: boundary
Out[37]:
[['3366307.654296875', '5814192.595703125'],
['3366372.2244873046875', '5814350.752685546875'],
['3366593.37969970703125', '5814844.73492431640625'],
['3367585.4779052734375', '5814429.293701171875'],
['3367680.55389404296875', '5814346.618896484375'],
....
[ 3366307.654296875 , 5814192.595703125 ]]
次に、それをnumpy配列に変換します。
In [43]: boundary2=np.asarray(boundary, dtype=float)
In [44]: boundary2
Out[44]:
array([[ 3366307.654296875 , 5814192.595703125 ],
[ 3366372.2244873046875 , 5814350.752685546875 ],
[ 3366593.37969970703125, 5814844.73492431640625],
....
[ 3366307.654296875 , 5814192.595703125 ]])
# the full number of significant digits is preserved.
# this also works with:
In [45]: boundary2=np.array(boundary, dtype=float)
In [46]: boundary2
Out[46]:
array([[ 3366307.654296875 , 5814192.595703125 ],
[ 3366372.2244873046875 , 5814350.752685546875 ],
[ 3366593.37969970703125, 5814844.73492431640625],
...
[ 3366307.654296875 , 5814192.595703125 ]])
# This also works with dtype=np.float
In [56]: boundary3=np.array(boundary, dtype=np.float)
In [57]: boundary3
Out[57]:
array([[ 3366307.654296875 , 5814192.595703125 ],
[ 3366372.2244873046875 , 5814350.752685546875 ],
[ 3366593.37969970703125, 5814844.73492431640625],
....
[ 3366307.654296875 , 5814192.595703125 ]])
これが私が混乱している理由です。使用した場合、有効数字が失われdtype=np.float32
ているように見えます。
In [58]: boundary4=np.array(boundary, dtype=np.float32)
In [59]: boundary4
Out[59]:
array([[ 3366307.75, 5814192.5 ],
[ 3366372.25, 5814351. ],
[ 3366593.5 , 5814844.5 ],
[ 3367585.5 , 5814429.5 ],
...
[ 3366307.75, 5814192.5 ]], dtype=float32)
私がそう思う理由は、どうやら配列が同じだからです。データを直接見ることはできませんが、で確認するとnp.allclose
Trueが返されます。
In [65]: np.allclose(boundary2, boundary4)
Out[65]: True
したがって、これまで読んだことがあるなら、なぜ私が混乱しているのか、そしておそらく次の2つの質問に答えられる人がいるのかを理解していただければ幸いです。
- なぜ
dtype=float32
私のデータを「隠す」のですか? - 心配する必要がありますか、それとも安全に使い続けることができ
dtype=float
ますか?