On 8/24/13, Warren Weckesser <warren.weckes...@gmail.com> wrote: > On 8/24/13, Tom Bennett <tom.benn...@mail.zyzhu.net> wrote: >> Hi All, >> >> I have two arrays, A and B.A is 3 x 100,000 and B is 100,000. If I do >> np.dot(A,B), I get [nan, nan, nan]. >> >> However, np.any(np.isnan(A))==False and np.any(no.isnan(B))==False. And >> also np.seterr(all='print') does not print anything. >> >> I am not wondering what is going on and how to avoid. >> >> In case it is important, A and B are from the normal equation of doing >> regression. I am regressing 100,000 observations on 3 100,000 long >> factors. >> >> Thanks, >> Tom >> > > What are the data types of the arrays, and what are the typical sizes > of the values in these arrays? I can get all nans from np.dot if the > values are huge floating point values: > > ``` > In [79]: x = 1e160*np.random.randn(3, 10) > > In [80]: y = 1e160*np.random.randn(10) > > In [81]: np.dot(x, y) > Out[81]: array([ nan, nan, nan]) > ```
...and that happens because some intermediate terms overflow to inf or -inf, and adding these gives nan: ``` In [89]: x = np.array([1e300]) In [90]: y = np.array([1e10]) In [91]: np.dot(x,y) Out[91]: inf In [92]: x2 = np.array([1e300, 1e300]) In [93]: y2 = np.array([1e10,-1e10]) In [94]: np.dot(x2, y2) Out[94]: nan ``` Warren > > Warren > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion