いくつかの計算中に精度を上げるために mpmath python ライブラリを使用していますが、結果を numpy ネイティブ型にキャストする必要があります。
より正確には、mpmath 行列 (mpf オブジェクト型を含む) を numpy.ndarray (float 型を含む) にキャストする必要があります。
私は生のアプローチで問題を解決しました:
# My input Matrix:
matr = mp.matrix(
[[ '115.80200375', '22.80402473', '13.69453064', '54.28049263'],
[ '22.80402473', '86.14887381', '53.79999432', '42.78548627'],
[ '13.69453064', '53.79999432', '110.9695448' , '37.24270321'],
[ '54.28049263', '42.78548627', '37.24270321', '95.79388469']])
# multiple precision computation
D = MPDBiteration(matr)
# Create a new ndarray
Z = numpy.ndarray((matr.cols,matr.rows),dtype=numpy.float)
# I fill it pretty "manually"
for i in range(0,matr.rows):
for j in range(0,matr.cols):
Z[i,j] = D[i,j] # or float(D[i,j]) seems to work the same
私の質問は:
それを行うためのより良い/よりエレガントな/より簡単な/賢い方法はありますか?
アップデート:
mpmath のドキュメントを何度も読んで、この非常に便利なメソッドtolist()を見つけました。次のように使用できます。
Z = np.array(matr.tolist(),dtype=np.float32)
少し良くてエレガントに見えます(forループは必要ありません)
それを行うより良い方法はありますか?私の 2 番目の解決策は、余分な桁を丸めたり切り捨てたりしますか?