Wie man FFT -basierte Faltung mit langen Doppel/Float128s schnell und genau durchführtPython

Python-Programme
Guest
 Wie man FFT -basierte Faltung mit langen Doppel/Float128s schnell und genau durchführt

Post by Guest »

Auf meinem Linux -System habe ich: < /p>

Code: Select all

np.finfo(np.float128)
info(resolution=1e-18, min=-1.189731495357231765e+4932, max=1.189731495357231765e+4932, dtype=float128)
< /code>
Das ist also ein 80-Bit-Doppel. Ich möchte eine Faltung zwischen zwei einigermaßen langen Arrays von NP.Float128 
s durchführen. scipy.signal.convolve funktioniert mit methode = 'Direct' , gibt jedoch die falsche Antwort für method = 'fft' an. Hier ist ein Spielzeugbeispiel: < /p>

Code: Select all

a = np.array(['1.e+401', '1.e+000', '1.e+401', '1.e+000'], dtype=np.float128)

convolve(a, a, mode='full', method='direct')
array([1.e+802, 2.e+401, 2.e+802, 4.e+401, 1.e+802, 2.e+401, 1.e+000],
dtype=float128) # correct
convolve(a, a, mode='full', method='fft')
array([1.e+802, 0.e+000, 2.e+802, 0.e+000, 1.e+802, 0.e+000, 0.e+000],
dtype=float128) # wrong
Ich habe versucht, die Faltung mit Pyfftw von Grund auf neu zu implementieren, aber es gab immer noch die falsche Antwort. Um eine Flucht zu machen, die dem folgenden schnell und genau mit FFTS ähnelt: < /p>

Code: Select all

a = np.array([1e401, 1e000, 1e401, 1e000] * 10000, dtype=np.float128)
convolve(a, a)
Wie kann das geschehen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post