Sign in to follow this  
Gaiiden

div/0 problem

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[b] = 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[b] = y
b +=1

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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this