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

Reply via email to