? on scipy.fftpack

2006-06-28 Thread Mike Duffy
I've been debugging a simulation I wrote a while ago, and it seems that
the problem is in the fft module itself. I'm trying a simple test by
just feeding the function a basic real gaussian. Obviously, I should
get back the same real gaussian, but what I get is not even close. Can
anyone help me? Thanks in advance.

code
from scipy import *
import pylab

fft, ifft = fftpack.rfft, fftpack.irfft

def main():
sigma = 50.
x = arange(-100, 100, 1, 'f')
g = exp(-x**2 / (2 * sigma)) / sqrt(2 * pi)
testFFT(x, g)

def testFFT(x, f):
pylab.plot(x, f)
pylab.title('Initial gaussian')
pylab.show()
pylab.clf()

f = fft(f)
pylab.plot(x, f)
pylab.title('After first FFT')
pylab.show()
pylab.clf()

f = fft(f)
pylab.plot(x, f)
pylab.title('After first iFFt')
pylab.show()
pylab.clf()

if __name__ == '__main__': main()
/code

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: ? on scipy.fftpack

2006-06-28 Thread Mike Duffy

Robert Kern wrote:
 You will probably want to ask scipy questions on scipy-user. There aren't many
 scipy people here.

http://www.scipy.org/Mailing_Lists

 I haven't run your code, yet, but one of the things you are running into is 
 the
 FFT packing convention for FFTs on real functions. Please read the docstring:

Ok, thanks a lot. I was unaware of that mailing list, I will certainly
go there next. I have read the documentation, but I'm not sure what
packing convention you are referring to.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: ? on scipy.fftpack

2006-06-28 Thread Mike Duffy
Oops, sorry. I see what you mean. I was reading the docs for the
regular (complex) fft function, since that was what I was initially
having the bug with. I was just using the rfft to simplify things, but
I guess that was ironic. Anyway, I appreciate your help and don't mean
to burden you. Again, I will suubmit this to the scipy list.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Specifing arguments type for a function

2006-06-21 Thread Mike Duffy
Paolo Pantaleo wrote:
 I have a function

 def f(the_arg):
 ...

 and I want to state that the_arg must be only of a certain type
 (actually a list). Is there a way to do that?

I wrote a cool function decorator just for that purpose. It's posted on
the Python Decorator Library at:

http://wiki.python.org/moin/PythonDecoratorLibrary#head-308f2b3507ca91800def19d813348f78db34303e


If you use it, you will be able to simply write:

@accepts(list)
def f(the_arg):
...

and you will get a warning message if the_arg is not a list. Or, if you
want an exception raised, then just:

@accepts(list, debug=2)
def f(the_arg):
...

Let me know what you think, if you do end up using it. I'm eager for
feedback.

-- 
http://mail.python.org/mailman/listinfo/python-list


Legitimate use of the is comparison operator?

2006-06-17 Thread Mike Duffy
I just recently realized that the comparison operator is actually
works for comparing numeric values. Now, I know that its intended use
is for testing object identity, but I have used it for a few other
things, such as type checking, and I was just wondering whether or not
it is considered bad practice in the Python Community to use it for
numerics as well.

Example:

a = range(5)
b = range(5)

if len(a) is len(b):
print They're the same size!
else:
print They're not the same size!

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Legitimate use of the is comparison operator?

2006-06-17 Thread Mike Duffy
Fredrik Lundh wrote:

 except that it doesn't work.

 writing broken code is never a good practice.

With all due respect, for some reason it seems to work on my machine.
Because I certainly agree with you about writing broken code.

Python 2.4.2 (#1, Jan 17 2006, 16:52:02)
[GCC 4.0.0 20041026 (Apple Computer, Inc. build 4061)] on darwin
Type help, copyright, credits or license for more information.
 a = range(5)
 b = range(5)

 if len(a) is len(b):
... print They're the same size!
... else:
... print They're not the same size!
...
They're the same size!



 (the reason that it appears to work for small integers is that the
 interpreter is caching the objects for some commonly used values,
 including small integers and one-character strings.  but that's an
 interpreter implementation detail, not something you can rely on).
 
That's very interesting. Thank you for explaining  :-)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Legitimate use of the is comparison operator?

2006-06-17 Thread Mike Duffy
Gary Herron wrote:

  100 is (99+1)
 False

  2 is (1+1)
 True

  100 is 100
 True

 This is highly implementation dependent. The current (C) implementation
 of Python has a cache for small integers, so the attempt to compare
 values with is works for some small integers, and fails for some large
 integers, but curiously, not all instances of comparing large integers.


Ahh, thank you. That explains why Fredrick's and Jean-Paul's example
did not work, but mine did (I was using *small* integers). Ok, well I
definitely get the picture. Use the is operator for what it was
intended for, or deal with broken code ;-)  Thanks a lot guys.

-- 
http://mail.python.org/mailman/listinfo/python-list