On 18/01/15 13:20, Sydney Shall wrote:
The problem is I am occasionally getting exactly zeros when I need to
obtain the logarithm of the number.
for i in range(len(cap)):
Its usually better to iterate over the collection rather than use indexing:
for item in cap:
if cap[i] == 0.0:
Its usually a bad idea to compare floats for equality. It's better to
define a small limit value and check if they are within the range.
like this
e = 0.0000000001 # or whatever
if val-e <= cap[[i] <= val+e:
do something.
In your case where you test against zero it simplifies to
if -e < cap[i] < e:
do something
tmp = math.log(1.0)
log(1) is a constant (0) so you might as well just say
lncap.append(tmp)
lncap.append(0.0)
else:
lncap.append(math.log(cap[i]))
But won't this cause you to have really dodgy results? How do you
distinguish genuine log(1) values from your pseudo log(0) values?
Or does it not matter?
I have set mu options to plain text.
Thanks, always appreciated.
While you can make comprehensions do what you want its not always a good
idea. Sometimes its better to revert to explicit loops if the complexity
of the comprehension gets too great.
But in your case its fairly simple to use a conditional expression:
lncap = [ 0.0 if (-e < item < e) else math.log(item) for item in cap]
HTH
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor