Oplossing: runtimewaarschuwing: ongeldige waarde aangetroffen in double_scalars


Een fout die je in Python tegen kunt komen is:

 runtimewarning: invalid value encountered in double_scalars

Deze fout treedt op wanneer u probeert een wiskundige bewerking uit te voeren met extreem kleine of extreem grote getallen en Python als resultaat eenvoudigweg een NaN-waarde genereert.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we de volgende wiskundige bewerking proberen uit te voeren met twee NumPy-arrays:

 import numpy as np

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (-3*array1). sum () / np. exp (-3*array2). sum ()

RuntimeWarning: invalid value encountered in double_scalars

We ontvangen een RuntimeWarning omdat het resultaat in de noemer extreem dicht bij nul ligt.

Dit betekent dat het antwoord op het delingsprobleem extreem groot zal zijn en dat Python niet in staat is zo’n grote waarde te verwerken.

Hoe u de fout kunt oplossen

De manier om dit type fout op te lossen is doorgaans het gebruik van een speciale functie uit een andere Python-bibliotheek die extreem kleine of extreem grote waarden in berekeningen kan verwerken.

In dit geval kunnen we de functie logsumexp() uit de SciPy-bibliotheek gebruiken:

 import numpy as np
from scipy. special import logsumexp

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2))

2.7071782767869983e+195

Merk op dat het resultaat extreem groot is, maar we krijgen geen fouten omdat we een speciale wiskundige functie uit de SciPy-bibliotheek hebben gebruikt die is ontworpen om dit soort getallen te verwerken.

In veel gevallen is het de moeite waard om in de SciPy-bibliotheek naar speciale functies te zoeken die extreme wiskundige bewerkingen aankunnen, omdat deze functies specifiek zijn ontworpen voor wetenschappelijk computergebruik.

Opmerking : u kunt hier de volledige online documentatie voor de functie logsumexp() vinden.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:

Hoe KeyError in Panda’s te repareren
Oplossing: ValueError: Kan float NaN niet naar int converteren
Oplossing: ValueError: Operanden konden niet worden uitgezonden met vormen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert