In my for loop, my code generates a list like this one:
list([0.0,0.0]/sum([0.0,0.0]))
The loop generates all sort of other number vectors but it also generates [nan,nan]
, and to avoid it I tried to put in a conditional to prevent it like the one below, but it doesn't return true.
nan in list([0.0,0.0]/sum([0.0,0.0]))
>>> False
Shouldn't it return true?
Libraries I've loaded:
import PerformanceAnalytics as perf
import DataAnalyticsHelpers
import DataHelpers as data
import OptimizationHelpers as optim
from matplotlib.pylab import *
from pandas.io.data import DataReader
from datetime import datetime,date,time
import tradingWithPython as twp
import tradingWithPython.lib.yahooFinance as data_downloader # used to get data from yahoo finance
import pandas as pd # as always.
import numpy as np
import zipline as zp
from scipy.optimize import minimize
from itertools import product, combinations
import time
from math import isnan
A simple solution to check for a NaN in Python is using the mathematical function math. isnan() . It returns True if the specified parameter is a NaN and False otherwise.
To remove NaN from a list using Python, the easiest way is to use the isnan() function from the Python math module and list comprehension. You can also use the Python filter() function. The Python numpy module also provides an isnan() function that we can use to check if a value is NaN.
I think this makes sense because of your pulling numpy
into scope indirectly via the star import.
>>> import numpy as np
>>> [0.0,0.0]/0
Traceback (most recent call last):
File "<ipython-input-3-aae9e30b3430>", line 1, in <module>
[0.0,0.0]/0
TypeError: unsupported operand type(s) for /: 'list' and 'int'
>>> [0.0,0.0]/np.float64(0)
array([ nan, nan])
When you did
from matplotlib.pylab import *
it pulled in numpy.sum
:
>>> from matplotlib.pylab import *
>>> sum is np.sum
True
>>> [0.0,0.0]/sum([0.0, 0.0])
array([ nan, nan])
You can test that this nan
object (nan
isn't unique in general) is in a list via identity, but if you try it in an array
it seems to test via equality, and nan != nan
:
>>> nan == nan
False
>>> nan == nan, nan is nan
(False, True)
>>> nan in [nan]
True
>>> nan in np.array([nan])
False
You could use np.isnan
:
>>> np.isnan([nan, nan])
array([ True, True], dtype=bool)
>>> np.isnan([nan, nan]).any()
True
You should use the math
module.
>>> import math
>>> math.isnan(item)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With