Jump to content
  • Advertisement
Sign in to follow this  
Gaiiden

div/0 problem

This topic is 2203 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

A friend of mine is having trouble with some of her code - tried to help but not familiar with Python at all I'm afraid. She's pretty much teaching herself for her internship and just picked up the language this week. I'm thinking it's not possible to use a floating point value as a for loop iterator that is perhaps causing [font=courier new,courier,monospace]s[/font] to revert to 0.

She gets the div/0 error on line 13

[source lang="py"]
#input array of data as the h(x) [DataIn]
#use the FamilyWavelet equation with w, s changing through the loop--random #values
#multiply h(x) and FamilyWavelet and sum them up

import numpy as np
import matplotlib.pyplot as plt

def MotherWavelet(eta, w):
x = np.pi**(-1./4)*np.exp(1j*w*eta)*np.exp((-eta**2)/2.)
return x

def FamilyWavelet(n,n1,w,s,dt):
x = (dt/s)**(1./2.)
N = ((n1-n)*(dt))/s
mw = MotherWavelet(N, w)
r = x*mw
return r

#will get data from file
DataIn = np.loadtxt('/Users/Devan/Documents/SLAC/Projects/wavlet_tutorial/data/nino3sst.dat')


newArray = np.zeros((len(DataIn)))
totalSumN1 = np.zeros((120)) #want 120 spots in the array
totalSumS = np.zeros((200)) #100 spots in the array

a = 0
n1 = 0
w = 5
s = 0.2
b = 0

#an array of all the n1s from 0 to 200

for n1 in range(120):
for s in range(4):
for a in range(len(DataIn)):
y = FamilyWavelet(a, n1, w, s, 0.4)
c = DataIn[a] * y.conj()
newArray[a] = c


y = np.sum(newArray)
totalSumS = y
b +=1

for a in range(len(DataIn)):
y = FamilyWavelet(a, n1, w, s, 0.4)
c = DataIn[a] * y.conj()
newArray[a] = c


y = np.sum(newArray)
totalSumN1 = y
b +=1

print np.concatenate((totalSumS, totalSumN1))
[/source] Edited by Gaiiden

Share this post


Link to post
Share on other sites
Advertisement
There may be other bugs, but I suspect "for s in range(4)" should be "for s in range(1, 4)" - otherwise s will start at 0 and cause a div/0 immediately in FamilyWavelet.

Share this post


Link to post
Share on other sites
yea, I also noticed she wanted [font=courier new,courier,monospace]s[font=arial,helvetica,sans-serif] [/font][/font]to carry in a predefined value for the initial loop and I'm not sure that's possible given the for loops seem to auto-increment. Unless something like [font=courier new,courier,monospace]range(0.2, 4)[/font] would work?

Share this post


Link to post
Share on other sites
I's not clear what you would want range(0.2, 4) to do. In any case, the range() function only accepts integer arguments, which can be annoying at times. It is possible to use a list comprehension in conjunction with a range() statement to generate floating point increments. Ex: [x * 0.1 for x in range(2, 40, 2)] would generate the numbers 0.2 to 3.8 with a 0.2 increment.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!