Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: ilkant - 10.02.26 - klo:21.06

Otsikko: Python runtime exp overflow [ratkaistu]
Kirjoitti: ilkant - 10.02.26 - klo:21.06
Python-ohjelmalle (https://www.facebook.com/photo/?fbid=1369949321825949&set=a.456019453218945) tulee virheilmoitus Python 3.13:llä:

RuntimeWarning: overflow encountered in exp
  np.exp( ((clcoding-0.3)*80)**2)*1.5 +

Koneessa on 32 GB ram-muistia. Paljonko sitä pitäisi olla tuohon laskuun?
Otsikko: Vs: Python runtime exp overflow
Kirjoitti: retu - 11.02.26 - klo:13.26
Tuo ilmoitus tarkoittaa että lukualue on ylittynyt. Perus float on kai 64-bittinen eli maximissaan 1.7976931348623157e+308. Jos siis lausekkeen lopputulos on suurempi, tulee tuo virhe. Jos tuo np on numpy, voit käyttää myös float128 tyyppiä, jonka lukualue on suurempi.

Toisaalta, mihin tarviit noin isoja lukuja? Olisiko kenties laskukaavassa joku käpy?
Otsikko: Vs: Python runtime exp overflow
Kirjoitti: ilkant - 12.02.26 - klo:01.04
Toisaalta, mihin tarviit noin isoja lukuja? Olisiko kenties laskukaavassa joku käpy?

Ohje auttoi! Nyt se pystyy laskemaan tämän ohjelman laskut. Tämä on sydänkäyräsimulaattori ja se on kopioitu FaceBookin jostain python-ryhmästä.

Koodia: [Valitse]
import numpy as np
from numpy import float128
import matplotlib.pyplot as plt

if __name__ == '__main__':
    clcoding = np.linspace(0, 1, 500)
    ecg = float128(10000)
    ecg = (
        np.sin(2*np.pi*5*clcoding)*0.1 +
        np.exp( ((clcoding-0.3)*80)**2)*1.5 +
        np.exp( ((clcoding-0.32)*200)**2) *-2 +
        np.exp( ((clcoding-0.35)*60)**2)*0.8
    )

    plt.figure(figsize=(8,3))
    plt.plot(clcoding,ecg)
    plt.title("Simulated Heartbeat Signal (ECG)")
    plt.xlabel("Time")
    plt.ylabel("Voltage")
    plt.grid()
    plt.show()
Otsikko: Vs: Python runtime exp overflow [ratkaistu]
Kirjoitti: SuperOscar - 12.02.26 - klo:10.55
Eksponenttifunktio ylivuotaa nopeasti float64:llä. 700:lla tulee vielä vastaus (1.0142320547350045e+304), 800 ylivuotaa, noin pikakokeena.

Numpyssä on muuten neliöimiseen funktio square(); en sitten tiedä, onko se merkitsevästi nopeampi kuin kahteen korottaminen (** 2) – tai onko nopeus kannaltasi mitenkään oleellinen tekijä.
Otsikko: Vs: Python runtime exp overflow [ratkaistu]
Kirjoitti: nm - 12.02.26 - klo:11.07
Toisaalta, mihin tarviit noin isoja lukuja? Olisiko kenties laskukaavassa joku käpy?

Ohje auttoi! Nyt se pystyy laskemaan tämän ohjelman laskut. Tämä on sydänkäyräsimulaattori ja se on kopioitu FaceBookin jostain python-ryhmästä.

Koodistasi puuttuu miinusmerkit np.exp-funktion sisältä. Siksi lasku vuotaa yli 64-bittisistä liukuluvuista, eikä piirretty käyrä näytä samalta kuin Facebook-esimerkissä.

Kokeile tällä korjatulla versiolla:
Koodia: [Valitse]
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    clcoding = np.linspace(0, 1, 500)
    ecg = (
        np.sin(2*np.pi*5*clcoding)*0.1 +
        np.exp(-((clcoding-0.3)*80)**2)*1.5 +
        np.exp(-((clcoding-0.32)*200)**2)*(-2) +
        np.exp(-((clcoding-0.35)*60)**2)*0.8
    )

    plt.figure(figsize=(8,3))
    plt.plot(clcoding,ecg)
    plt.title("Simulated Heartbeat Signal (ECG)")
    plt.xlabel("Time")
    plt.ylabel("Voltage")
    plt.grid()
    plt.show()
Otsikko: Vs: Python runtime exp overflow [ratkaistu]
Kirjoitti: ilkant - 13.02.26 - klo:09.29
Olen kokeillut jonkin verran noita koodipätkiä. Ne ovat yleensä kuvana. Miksei linkkinä kooditiedostoon, joka olisi tekstinä? Tai jokin kopiointipainike, jolla koodin saisi kopioitua leikepöydälle. Näin on tekoälysivuilla ja myös useammassa Q&A sivustoilla, joissa on neuvoja erilaisten vikatilanteiden välttämiseksi.

Tavallisesti kun olen jonkun koodin kirjoittanut kuvasta tekstiksi, tulee 2 tai 3 korjauskierrosta, joissa jouduu korjaamaan virheellisesti kirjoittamaansa koodia. Joskus joku rivi jää välistä pois ja joskus joku merkki on tullut nätyä ihan erilaisena kuin se oikeasti on. Tarkoitus on käydä jossain vaiheessa optikolla silmälasien uusimisen merkeissä. Mukavaa on myös Python Quiz koodipätkien kirjoittaminen tekstiksi ja käytännössä nähdä, mitä ne tulostavat. Ja voi sitä esimerkkiä muunnella ja kokeilla, miten tulostus muuttuu kun jotain muuttaa. Sekä voi palastella koodin ja katsoa yksityiskohtaisesti, mitä välituloksia mikäkin operaatio antaa.