Hello all, my first post here.

I am moving from using scilab to Pylab, can anyone tell me why the two following snippets of code produce very different results? BTW. The scilab code produces the expected result.

Scilab:

Lx=1;

Ly=1;

n=2;

m=2;

f=100;

w=2*%pi*f;*

t=1;

A=2;

Kx=n%pi/Lx;

Ky=m*%pi/Ly;

x=linspace(0,100);

y=linspace(0,100);

z=zeros(100,100);

for i = 1:100

for j = 1:100

z(i,j) = A * sin(Kx*x(i)) * sin(Ky*y(j)) * %e^(%i*w*t);

end

end

contour(z)

Pylab:

from pylab import *

Lx=1

Ly=1

n=2

m=2

f=100

w=2*pi*f

t=1

A=2

Kx=n*pi/Lx*

Ky=mpi/Ly

x=arange(0,100)

y=arange(0,100)

z=empty((100,100))

for i in range(1,100):

for j in range(1,100):

z[i, j] = A * sin(Kx*x[i]) * sin(Ky*y[j]) * e**(1j*w*t)

contourf(z)

show()

Cheers,

Pete.

Hello all, my first post here.

I am moving from using scilab to Pylab, can anyone tell me why the two

following snippets of code produce very different results? BTW. The scilab

code produces the expected result.

I don't know what scilab does, but the filling of the z array looks

wrong, since python indexing starts at 0, not 1, so you would want to

do

for i in range(0,100):

for j in range(0,100):

but you rarely want to loop over arrays. My snippet below shows how

to use meshgrid to use numpy's elementwise operations and avoid loops.

By only filling starting at 1, you are using the memory in the 0-th

row and column unintialized (np.zeros can be safer than np.empty in

this regard) Also, be careful when defining constants as integers,

since integer division produces integers (3/2=1)

Here is my script - does it produce what you are expecting?

import numpy as np

import matplotlib.pyplot as plt

Lx = 1.

Ly = 1.

n = 2.

m = 2.

f = 100.

w = 2*np.pi*f

t = 1.

A = 2.

Kx = n*np.pi/Lx

Ky = m*np.pi/Ly

x = np.arange(100.)

y = np.arange(100.)

X, Y = np.meshgrid(x, y)

Z = A * np.sin(Kx*X) * np.sin(Ky*Y) * np.exp(1j*w*t)

plt.contourf(Z)

plt.show()

## ···

On Fri, Jul 25, 2008 at 10:22 AM, Peter Wesbdell <flyingdeckchair@...982...> wrote:

Scilab:

Lx=1;

Ly=1;

n=2;

m=2;

f=100;

w=2*%pi*f;

t=1;

A=2;

Kx=n*%pi/Lx;

Ky=m*%pi/Ly;

x=linspace(0,100);

y=linspace(0,100);

z=zeros(100,100);

for i = 1:100

for j = 1:100

z(i,j) = A * sin(Kx*x(i)) * sin(Ky*y(j)) * %e^(%i*w*t);

end

end

contour(z)

Pylab:

from pylab import *

Lx=1

Ly=1

n=2

m=2

f=100

w=2*pi*f

t=1

A=2

Kx=n*pi/Lx

Ky=m*pi/Ly

x=arange(0,100)

y=arange(0,100)

z=empty((100,100))

for i in range(1,100):

for j in range(1,100):

z[i, j] = A * sin(Kx*x[i]) * sin(Ky*y[j]) * e**(1j*w*t)

contourf(z)

show()

Cheers,

Pete.

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge

Build the coolest Linux based applications with Moblin SDK & win great

prizes

Grand prize is a trip for two to an Open Source event anywhere in the world

http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users