3

質問: numpy を使用してすべてのスカラー変数と配列変数 の dtype を設定する最も簡単な方法は何ですか?

問題: アルゴリズムのサイズと複雑さが増すにつれて、丸め誤差と切り捨て誤差が原因で収束の問題を追跡することが非常に難しくなっています。ささいな原因としてこれらのエラーを排除するために、自信を持ってすべての操作の精度を設定する方法が必要です。

詳細: 研究セクションに示されているように、私は主に、スカラーの精度タイプを変数に設定する方法を理解するのに苦労しています (以下を参照)。私の配列には可変の dtype がありますが、スカラーが明示的に同じまたはより高い精度の dtype に設定されていない可能性があるため、ダウンキャストが発生し、アルゴリズムで無意識のうちに精度が失われます。

リサーチ:

float128 を numpy の標準 float-array として設定できますか? この質問は私に素晴らしいアドバイスをくれました。常に配列 dtype を変数に設定し、コードでその変数を「numpy.float64」または必要なものとして定義します。しかし、スカラーに対してこれを行う方法は?

入力の種類に関係なく、Python で正確な計算を実行する方法は? これは、スカラーを目的の入力にマッピングすることを提案しています。しかし、よりクリーンな方法はありますか?

私がやっていることはこれです(以下のコメントでOphionに感謝します):

import numpy as np
prec = np.float96

# a simple example of a scalar that might end up in my code
some_val = 5.0 - 3.99999999999999999992

# my current way of casting dtype of my scalars to the dtype of my arrays
myscalar = np.array(some_val, dtype=prec)

# the suggestion of using mapping:
myscalar = map(prec, (dt,))[0]
4

1 に答える 1

1

以下がうまくいくので:

>>> a=np.float128(5)
>>> a.dtype
dtype('float128')
>>> b=a-9
>>> b.dtype
dtype('float128')

これを変換する簡単な定義を書くのが最も簡単かもしれません:

def quad(num):
    return np.float128(num)

また

quad=np.float128

再確認するだけです:

>>> c=quad(5)-quad(4)
>>> c.dtype
dtype('float128')
>>> c
1.0

ゼロ次元のnumpy配列を作成しています:

>>> c.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : False
  ALIGNED : True
  UPDATEIFCOPY : False
>>> np.isscalar(c)
True
>>> c.shape
()
于 2013-08-16T01:52:12.843 に答える