[Tutor] TypeError: only length-1 arrays can be converted to Python scalars

2012-01-26 Thread stm atoc
Hi,

I have a question regarding the TypeError.

I have this script as follows in Python. I have run a program in Fortran:

# coding: utf-8
from pylab import *
import numpy
import matplotlib.pyplot as pyplot
import matplotlib.mlab as mlab

t=3600
N = 100
dz = 1.0

with open(act_out.list, r) as f:
   z = numpy.array([float(v) for v in f.readline().split()[1:]])
zm = z*1.0e6

a = numpy.loadtxt(act_out.list, skiprows=3)
t=a[:,0]
nu = a[0:,1:N+1]
Conc = a[:, N+1:]
hsml=zeros((103))
cprof=zeros((103))

hsml[0]=-1300.
hsml[-2]=-300.
hsml[-1]=0.
hsml[1:-2]=z*100-300.

cprof[0]=50.
cprof[-2]=500.
cprof[-1]=500.

idx=int(where(t==1800)[0])
cprof[1:-2]=Conc[idx]

lw = 2.0
dpi = 80
figure(figsize=(8,8),dpi=dpi)
pyplot.plot(cprof,hsml,'r-')

pyplot.xlabel('$Conc, mmol C m^3$')
pyplot.ylabel('$Hsml, micrometer$')
pyplot.grid(True)

legend()
savefig('Conc.png')
show()

after runing Python, I hav ethis massage:

 TypeError: only length-1 arrays can be converted to Python scalars

Any suggestion?  in fact, what I missed and what I should add to have
a right result!

Thanks in advance,
Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] changing coordinate

2012-01-11 Thread stm atoc
Hi:

I am trying to define a new coordinate for My plot.

I have a plot x axis is Concentration, Y axis, depth or Z.

Z= -1000 um.
and I would like to see the the trend and plot of concentration up to
-300 um and see how the plot changed according to the depth. So, my
main question is about how to change the coordinate based on 0 to
-300.

This is the relevant description:

# coding: utf-8
from pylab import *
import numpy
import matplotlib.pyplot as pyplot
import matplotlib.mlab as mlab

#t=3600
N = 100
dz = 1.0
h_s=-300


with open(ourtest_out.list, r) as f:
   z = numpy.array([float(v) for v in f.readline().split()[1:]])

z == z + h_s
a = numpy.loadtxt(ourtest_out.list, skiprows=3)
t=a[:,0]

nu = a[0:,1:N+1]
Conc = a[0:, N+1:]

lw = 2.0 #linewidth
dpi = 96
figure(figsize=(12,6),dpi=dpi)

pyplot.plot(Conc[1], z,'r-')
pyplot.xlabel('$Conc, mmol C m^3$')
pyplot.ylabel('$Hsml, micrometer$')
pyplot.grid(True)

legend()
savefig('Conc.png')
show()


lw = 2.0 #linewidth
dpi = 96
figure(figsize=(12,6),dpi=dpi)
semilogx(Conc[1], z,'r-')
pyplot.xlabel('$Conc, mmol C m^3$')
pyplot.ylabel('$Hsml, micrometer$')
pyplot.grid(True)

legend()
savefig('semiConc.png')
show()


lw = 2.0 #linewidth
dpi = 96
figure(figsize=(12,6),dpi=dpi)

semilogx(nu[1], z,'r-')
pyplot.xlabel('$nu, m^2/s^{-1}$')
pyplot.ylabel('$Hsml, micrometer$')
pyplot.grid(True)

legend()
savefig('nu.png')
show()
--
I do appreciate any help and advice.

Thanks,Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] unsupported operand

2011-12-18 Thread stm atoc
Well, I tried to  check and I do not have that problem any more..but i
have the clear script as follows and a couple of question regarding to
this:

# coding: utf-8
from pylab import *
import numpy
import matplotlib.pyplot as pyplot
import matplotlib.mlab as mlab
#tmax=360

with open(ourtest_out.list, r) as f:
   t = numpy.array([float(v) for v in f.readline().split()[1:]])

for t, filename in enumerate(ourtest_out.list):

a = numpy.loadtxt(ourtest_out.list, skiprows=3)
Conc=[]
#Conc = a[:, 200]
Conc.append(a[:,200])
#Conc = a[0:, tmax+1:]
plot(Conc,t)
show()

My main problem is, i do try to see the plot of Conc according to
time. I have a graph without any data!
Basically, I have a program written in FORTRAN including conc, time,
etc. calculation. The out put data shows that I do have concentration.
However, i am not able to have a plot based on time.
I should mention that I did have run the model (fortran) for
concentration according to the number of layer (N=200) and defined the
concentration like this Conc(0:N). Perhaps the reason that I am not
able to see the concentration with time is because of this definition.
BUT, still if I do plot based on pyplot.pcolor, I have a nice and
seems correct graph.

So, actually, I am not sure what is the problem for showing the
regular/linear plot. I hope I made it clear now..

Would it be possible to give me some hint please?

Thank you in advance,
Sue

On Sun, Dec 18, 2011 at 2:07 AM, Steven D'Aprano st...@pearwood.info wrote:
 stm atoc wrote:

 and this is the error that I got:


 Would you like us to guess which line causes the error?

 Please show the ENTIRE traceback. Do not retype it from memory, paraphrase
 or simplify it, or otherwise change it in any way. Copy and paste it.


 TypeError: unsupported operand type(s) for -: 'list' and 'int'

 What would you suggest?


 The code sample you showed did not include any subtractions. This hints that
 perhaps you are not showing us all of the code you are actually running. The
 full traceback will answer that one way or the other.

 Otherwise, I suggest you look at the line which the traceback prints. It
 probably has something like result = a - b (or some other subtraction).
 Look for the two variables: one of them is set to a list.


 --
 Steven


 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] unsupported operand

2011-12-17 Thread stm atoc
Hi there,

I would like to define concentration array based on time and then plot it.
Here is the profile:

from pylab import *
import numpy
import array
import math
tmax=1*3600
t  = 1.
outfile=open('ourtest_out.list','w')
N = 100
Conc1 = arange([0, tmax])
outfile.close()

lw = 2.0 #linewidth
dpi = 96
figure(figsize=(12,6),dpi=dpi)
pyplot.plot(Conc1, t,'r-',label='Conc' )
savefig('Conc.png')
show()

and this is the error that I got:

TypeError: unsupported operand type(s) for -: 'list' and 'int'

What would you suggest?
Thank you,
Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] plotting in python

2011-12-01 Thread stm atoc
The output of the print len(Conc[0]), len(z) is 100 3600.
Now I changed Conc[0] to Conc[1], and the output is: 100 100
But still I need to see from Concentration from 0.


On Thu, Dec 1, 2011 at 5:26 AM, Asokan Pichai paso...@talentsprint.com wrote:
 On Thu, Dec 1, 2011 at 2:38 AM, stm atoc stm.at...@googlemail.com wrote:
 Hi there,

 I have a question regarding plotting with Python.

 I have the following python script:

 [SNIPPED]
 plot(Conc[0],z)

 [SNIPPED]
 ---So, What would you suggest?

 What is the output of
 print len(Conc[0]), len(z)

 You may insert that line above the plot and see

 Asokan Pichai
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] plotting in python

2011-12-01 Thread stm atoc
For previous script that I have written, I had trouble having one plot
for all data at the same time and I could see two line for Conc[0] and
Conc[1] separately. Now, even I modified Conc = a[1:, N+1:] to  Conc =
a[0:, N+1:], still one plot is created...which is pretty good and no
error!

Thank you so much,
Sue

On Thu, Dec 1, 2011 at 12:39 PM, Andreas Perstinger
andreas.perstin...@gmx.net wrote:
 [Still top-posting :-( ]


 On 2011-12-01 11:13, stm atoc wrote:

 Well, I did also change the line in the python script to this:

 plot(Conc[0],z,'r-',label='initial')
 plot(Conc[1],z,'b-',label='after 20s')

 to see both Conc[0] and [1].


 And did it work?


 I will send the output data attaches to this email  (ourtest_out.list).

 I wonder if this way is fine.


 I'm not sure about the policy regarding attachements on this list but I
 think it would have been better to provide a link than attach it.

 Anyways, I've reduced your original script, did a test run and it works as
 expected (at least it shows a plot):

 import numpy
 import matplotlib.pyplot as pyplot

 with open(ourtest_out.list, r) as f:
    z = numpy.array([float(v) for v in f.readline().split()[1:]])

 a = numpy.loadtxt(ourtest_out.list, skiprows=3)
 N = 100
 Conc = a[1:, N+1:]

 print len(Conc[0]) == len(z)

 pyplot.figure()
 pyplot.plot(Conc[0], z)
 pyplot.show()

 Do you still get an error?

 Bye, Andreas
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] New plot over the old graph

2011-12-01 Thread stm atoc
Hi there,

I would like to make a new plot with new data over the old one (with
old/first data) in the same condition (shape, dimensions) for
comparison and analysis data.

With your help, I have a good script from the previous discussion:


**
from pylab import *
import numpy
import matplotlib.pyplot as pyplot
import matplotlib.mlab as mlab

with open(ourtest_out.list, r) as f:
   z = numpy.array([float(v) for v in f.readline().split()[1:]])

a = numpy.loadtxt(ourtest_out.list, skiprows=3)
N = 100
Conc = a[0:, N+1:]
print len(Conc[0]) == len(z)

figure()

pyplot.plot(Conc[0],z,'r-',label='initial')
pyplot.plot(Conc[1],z,'b-',label='after 20s')

show()
*

I have tried to make subplot for this case as follows:

pyplot.subplot(111)
pyplot.plot(Conc[0],z,'r-',label='initial')
pyplot.plot(Conc[1],z,'b-',label='after 20s')

However, I am not sure how to add new data over this to make a graph
including both new and old data simultaneously.

I do appreciate for any advice.

Thank you,
Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] New plot over the old graph

2011-12-01 Thread stm atoc
Thanks for all information/websites and advice. Yes the graph is
exactly like the one you mentioned. Also, I would like to have them in
one not two, but I think since the dimension of the x and y are not
same, I have no choice.

 What I like to do now is comparing 2 (later 3 or more) different sets
of data, e.g. comparison among Conc[1] with sets

I have changed the script like this:

with open(ourtest_out.list, r) as f:
   z = numpy.array([float(v) for v in f.readline().split()[1:]])

a1 = numpy.loadtxt(ourtest_out1.list, skiprows=3)
a2 = numpy.loadtxt(ourtest_out2.list, skiprows=3)
a3 = numpy.loadtxt(ourtest_out3.list, skiprows=3)

N = 100

Conc1 = a1[0:, N+1:] #base case
Conc2 = a2[0:, N+1:] # Ydw=0.1
Conc3 = a3[0:, N+1:] # nuh=0.01
lw = 2.0 #linewidth
dpi = 96
figure(figsize=(10,6),dpi=dpi)

pyplot.subplot(111)
pyplot.plot(Conc1[1], z)
pyplot.plot(Conc2[1], z)
pyplot.plot(Conc3[1], z)
pyplot.xlim(0,1)

plt.xlabel('Conc')
plt.ylabel('z')

pyplot.grid(True)
show()
savefig('Conc.png')
close()

This can give me the comparison in one graph, I suppose.
Now, first I like to know if this is a fine/logical script. otherwise
I would like to know about probably a better way to write it with less
lines!
and second, when I do plot, each grid between x or y axis, has a
thickness of 0.2. what I like do is to change it to 0.1 grid . So, I
couldn't find it through matplotlib website (at least with my
searching. Would it be possible helping me about?  I am  new at python
and a beginner and I do have learn while I work with it...

Thanks in advance,
Sue


On Thu, Dec 1, 2011 at 6:25 PM, Andreas Perstinger
andreas.perstin...@gmx.net wrote:
 On 2011-12-01 14:30, stm atoc wrote:

 With your help, I have a good script from the previous discussion:

 **
 from pylab import *


 Have you used MATLAB before and are used to its syntax? In general star
 imports (from xxx import *) are a bad practice and IMHO should be avoided.


 import numpy
 import matplotlib.pyplot as pyplot
 import matplotlib.mlab as mlab


 These imports are unnecessary if you use the first line because pylab
 imports everything from numpy and matplotlib into a single namespace. So
 either use just the first line (not recommended) or the following line
 (recommended).

 See also
 http://matplotlib.sourceforge.net/faq/usage_faq.html#matplotlib-pylab-and-pyplot-how-are-they-related
 and
 http://matplotlib.sourceforge.net/faq/usage_faq.html#coding-styles

 BTW: Why do you import mlab when you don't use it?


 with open(ourtest_out.list, r) as f:
    z = numpy.array([float(v) for v in f.readline().split()[1:]])

 a = numpy.loadtxt(ourtest_out.list, skiprows=3)
 N = 100
 Conc = a[0:, N+1:]
 print len(Conc[0]) == len(z)


 This line was just for testing. You can delete it without any consequences.



 figure()

 pyplot.plot(Conc[0],z,'r-',label='initial')
 pyplot.plot(Conc[1],z,'b-',label='after 20s')

 show()


 Isn't that what you want? You are plotting all your data in one graph. There
 is a straight red line on the left side and a falling blue line from left to
 right.


 *

 I have tried to make subplot for this case as follows:

 pyplot.subplot(111)
 pyplot.plot(Conc[0],z,'r-',label='initial')
 pyplot.plot(Conc[1],z,'b-',label='after 20s')


 Here you are creating a subplot with 1 plot each row and 1 plot each column,
 in other words you do the same as above (creating just 1 plot). If you want
 to have for example 4 plots in the same window with 2 each row and 2 each
 column you have to use

 pyplot.subplot(221)

 After plotting all the data in this first axes you have to switch to the
 next one:

 pyplot.subplot(222)

 Have you already read the matplotlib-tutorial:
 http://matplotlib.sourceforge.net/users/pyplot_tutorial.html


 However, I am not sure how to add new data over this to make a graph
 including both new and old data simultaneously.


 As I've said before: You are already plotting all data in one graph.
 Don't you get two different lines?

 Bye, Andreas
 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] New plot over the old graph

2011-12-01 Thread stm atoc
I appreciated for the accurate response.
I used step by step and  it is running now.

Thank you very much for your advice and guidance,

Sue


On Thu, Dec 1, 2011 at 10:01 PM, Andreas Perstinger
andreas.perstin...@gmx.net wrote:
 On 2011-12-01 19:20, stm atoc wrote:

 Thanks for all information/websites and advice. Yes the graph is
 exactly like the one you mentioned. Also, I would like to have them in
 one not two, but I think since the dimension of the x and y are not
 same, I have no choice.

  What I like to do now is comparing 2 (later 3 or more) different sets
 of data, e.g. comparison among Conc[1] with sets

 I have changed the script like this:

 with open(ourtest_out.list, r) as f:
    z = numpy.array([float(v) for v in f.readline().split()[1:]])

 a1 = numpy.loadtxt(ourtest_out1.list, skiprows=3)
 a2 = numpy.loadtxt(ourtest_out2.list, skiprows=3)
 a3 = numpy.loadtxt(ourtest_out3.list, skiprows=3)

 N = 100

 Conc1 = a1[0:, N+1:] #base case
 Conc2 = a2[0:, N+1:] # Ydw=0.1
 Conc3 = a3[0:, N+1:] # nuh=0.01
 lw = 2.0 #linewidth


 You aren't using lw so it doesn't make sense to define it.

 dpi = 96
 figure(figsize=(10,6),dpi=dpi)


 I prefer to not clutter up the namespace with star imports (from pylabs
 import *) but it's your choice.


 pyplot.subplot(111)


 If you just use one graph/figure this call is unnecessary.


 pyplot.plot(Conc1[1], z)
 pyplot.plot(Conc2[1], z)
 pyplot.plot(Conc3[1], z)
 pyplot.xlim(0,1)

 plt.xlabel('Conc')
 plt.ylabel('z')


 I assume you've got these lines from the tutorial. But there they are using
 the following import:

 import matplotlib.pyplot as plt

 I've used

 import matplotlib.pyplot as pyplot

 so you have to decide which name you want to use (You can't mix both).

 In general, if you just use

 import matplotlib.pyplot

 you would have to use always the full name:

 matplotlib.pyplot.xlabel('Conc')

 But with the as-keyword you can choose, which name gets imported into the
 namespace.

 If you have problems understanding imports and namespaces look at Alan's
 tutorial:
 http://www.freenetpages.co.uk/hp/alan.gauld/tutfunc.htm (section Using
 Modules)
 http://www.freenetpages.co.uk/hp/alan.gauld/tutname.htm (about Namespaces)



 pyplot.grid(True)
 show()
 savefig('Conc.png')


 You should call savefig before show because in non-interactive mode
 (calling the script from the commandline) show will block all figures
 until they are closed. So after show there won't be any figures left and
 savefig will write an empty figure to the file.


 close()

 This can give me the comparison in one graph, I suppose.
 Now, first I like to know if this is a fine/logical script. otherwise
 I would like to know about probably a better way to write it with less
 lines!


 You could write the whole script in a more object-oriented style where you
 create a figure-instance and then set the attributes you want instead of
 calling all the functions. But for the beginning it's ok.


 and second, when I do plot, each grid between x or y axis, has a
 thickness of 0.2. what I like do is to change it to 0.1 grid . So, I
 couldn't find it through matplotlib website (at least with my
 searching. Would it be possible helping me about?


 You set the scale with the xticks-function (or the corresponding
 yticks):
 http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.xticks

 So in your case you could use

 pyplot.xticks(numpy.arange(0, 1.1, 0.1))


 Bye, Andreas
 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] plotting in python

2011-11-30 Thread stm atoc
Hi there,

I have a question regarding plotting with Python.

I have the following python script:

# coding: utf-8
from pylab import *
import numpy

filename='ourtest_out.list'

fh=open(filename)
line=fh.readline()
fh.close

z=array([ float(val) for val in line.split()[1:] ])


a = numpy.loadtxt(filename,skiprows=3)
N=100
t = a[:,0]
nu = a[0:,1:N+1]
#Conc = a[1:,N+1:]
Conc = a[1:,N+1:]

levels=arange(-10,1)
levels=levels[-3]-levels
t=t/360.

figure()
plot(Conc[0],z)

xlabel('C')
ylabel('z')
#show()
savefig('Conc.png')
close()

#nu
figure()
lw = 2.0 #linewidth
dpi = 96

levels=arange(-10,1)
levels=levels[-3]-levels
plot(nu[0],z)
xlabel('nu')
ylabel('z')
savefig('nu.png')
close()


However, once I run the program (run.py)

I have error like this:

---
ValueErrorTraceback (most recent call last)
/Users/…./run.py in module()
 24
 25 figure()
--- 26 plot(Conc[0],z)
 27
 28 xlabel('C')

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/pyplot.py
in plot(*args, **kwargs)
   2284 ax.hold(hold)
   2285 try:
- 2286 ret = ax.plot(*args, **kwargs)
   2287 draw_if_interactive()
   2288 finally:

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
in plot(self, *args, **kwargs)
   3781 lines = []
   3782
- 3783 for line in self._get_lines(*args, **kwargs):
   3784 self.add_line(line)
   3785 lines.append(line)

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
in _grab_next_args(self, *args, **kwargs)
315 return
316 if len(remaining) = 3:
-- 317 for seg in self._plot_args(remaining, kwargs):
318 yield seg
319 return

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
in _plot_args(self, tup, kwargs)
292 x = np.arange(y.shape[0], dtype=float)
293
-- 294 x, y = self._xy_from_xy(x, y)
295
296 if self.command == 'plot':

/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py
in _xy_from_xy(self, x, y)
232 y = np.atleast_1d(y)
233 if x.shape[0] != y.shape[0]:
-- 234 raise ValueError(x and y must have same first dimension)
235 if x.ndim  2 or y.ndim  2:
236 raise ValueError(x and y can be no greater than 2-D)

ValueError: x and y must have same first dimension


---So, What would you suggest?
Thanks in advance,
Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Do loop in Python

2011-11-30 Thread stm atoc
Yes. Actually, I have changed it to this kine od script:
# == model loop ==

#Optione1
if True:
 z=zeros( (numlayers,) )
 thickness= (thickness*1.0)
 for l in layers:
   z = arange ((-thickness - h * l),0,dz)
##z= t -h * l
 nu = num+ (0.001*exp(-0.005*(z+200.))*dz)

#Option2
if False:
 thickness = range(-200 , 0, 10) # a list from -200 to 0 with step 10
(0, 10, 20, ..., 190, 200)
 layers = range(1,11) # a list from 1 to 10
 for t in thickness:
   for l in layers:
z = arange(( t + h * l ), 0, dz )
#zvalues = arange(-200.,0,dz)
 nu = num+ (0.001*exp(-0.005*(z+200.)))

plot(nu,z)


Then it seems it works.

it should have a trend to reducing values...
- Show quoted text -

On Tue, Nov 29, 2011 at 2:00 PM, Steven D'Aprano st...@pearwood.info wrote:
 stm atoc wrote:

 Thank you so much for your reply. It was very helpful information and
 I used it in order to improve the program

 Here is the new version of the program:

 zvalues = [-200]  # starting value
 hvalues = [10]  # starting value
 increments = [1, 1, 1, 1, 1, 1, 1, 1]
 for N in increments:
       h = hvalues[-1] - N
       hvalues.append(h)
       z = zvalues[-1] + h
       zvalues.append(z)
       height = arange((z)*dz,0,dz)
       for z,when in enumerate(height):
           nuh.append(0.001 * exp(-0.005*(z+200.0))*dz) #turbulence
 diffusivity m**2/s
           nu.append(num + nuh[z])



 I'm afraid I still don't know what the arange function is. Is that a
 function you have written yourself? However, I can see that it doesn't
 actually get used!

 You create an arange object, and call it height.

    height = arange((z)*dz,0,dz)

 You should insert a print statement after this line to see what value height
 is given, and check that it is what you expect it to be.

 Presumably height is some sort of list or sequence of values, because you
 next use it in a for-loop:

    for z,when in enumerate(height):
        ...

 So now we know that z takes on the values 0, 1, 2, 3, ... and when takes on
 the values from height, whatever they are. But in the rest of your code, you
 don't use when at all:

        nuh.append(0.001 * exp(-0.005*(z+200.0))*dz)

        nu.append(num + nuh[z])

 No when, hence the values from height aren't actually used. Strange.

 Also, what are dz and num? You use them both, but I can't see where they are
 defined or what value they have. Likewise nuh and nu, although I can guess
 they are probably lists because you append to them.

 Because I don't know what values to use, and I don't know what arange is, I
 can't run your code to see what it does. So I'm reduced to guessing.

 If I take a wild stab in the dark that dz is a small number, say, 0.01, I
 can see what values nuh gets:


 py from math import exp
 py dz = 0.01
 py nuh = []
 py for z in range(10):
 ...     nuh.append(0.001 * exp(-0.005*(z+200.0))*dz)
 ...
 py from pprint import pprint
 py pprint(nuh)
 [3.6787944117144236e-06,
  3.6604463480401533e-06,
  3.6421897957152333e-06,
  3.624024298324903e-06,
  3.6059494017307832e-06,
  3.587964654059516e-06,
  3.5700696056914737e-06,
  3.5522638092495153e-06,
  3.5345468195878014e-06,
  3.5169181937806692e-06]

 Is that the sort of behaviour you expect for nuh?

 Since the nuh values are changing, num+nuh[z] should also be changing, which
 implies nu should be changing.

 Unless num is so large that rounding error wipes out the nuh values.




 --
 Steven
 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Do loop in Python

2011-11-29 Thread stm atoc
Thank you so much. This script and all information was totally helpful
and actually helped me for the next step of my work as well.

Have a great time.
Sue

On Fri, Nov 25, 2011 at 10:44 PM, Andreas Perstinger
andreas.perstin...@gmx.net wrote:
 On 2011-11-25 14:46, stm atoc wrote:

 Here is the new version of the program:

 zvalues = [-200]  # starting value
 hvalues = [10]  # starting value
 increments = [1, 1, 1, 1, 1, 1, 1, 1]
 for N in increments:
        h = hvalues[-1] - N
        hvalues.append(h)
        z = zvalues[-1] + h
        zvalues.append(z)
        height = arange((z)*dz,0,dz)


 There is no arange in python. Could it be that you use numpy and import it
 with from numpy import *?

        for z,when in enumerate(height):


 I'm pretty sure this line doesn't do what you expect it to do. You have a
 sequence (a numpy array) named height and after calling enumerate you
 get a list of tuples in the form of [(0, height[0]), (1, height[1]), ...].
 Now the for-loop iterates over this list and assigns z to the first value
 of the tuple (the index-values) and when to the second (the values from
 height). You later never use when but just use z. If you really want
 that, the enumerate is completly unnecessary and you could just use for z
 in range(len(height)). But I'm not sure if numpy arrays work with len().


            nuh.append(0.001 * exp(-0.005*(z+200.0))*dz) #turbulence
 diffusivity m**2/s
            nu.append(num + nuh[z])

 The story is like this:
 I should define layers and thickness and see how the diffusion profile
 changes over the z.
 height (or depth) of the total thickness or 'z'.
 I basically, define 'z' in 10 layers and each layer is called  ' N' .
 Difference between each layer is 'h', which is equal 10 micrometer.
 Now, what I like to do is the modification of nu based on each zvalue
 In fact, for each 'zvalue' o'z' step, I need to calculate a different
 value for 'nu' based on the available equation in the program.

 BUT, I am not sure, exactly, how to add the new do loop of z inside
 another loop of nu.


 For me your explanations are still too confusing. Could it be that you are
 thinking way too complicated?

 My guess is you want to have a range of material thicknesses (from 1 to 200
 micrometers in 10 micrometer-steps) and then you want from each thickness 10
 different layers, right?

 import math # you should always tell us which modules you import
 num = 0.05 # some constant
 nu = [] # list of resulting values
 h = 10.0 # height of one layer
 thickness = range(0, 210, 10) # a list from 0 to 200 with step 10 (0, 10,
 20, ..., 190, 200)
 layers = range(1,11) # a list from 1 to 10
 for t in thickness:
  for l in layers:
    z = t + h * l # I'm not sure if you want to add or subtract the layer
 thickness
    nu = num + (0.01 * math.exp(-0.05 * (z + 200.0)))

 This will result in a big one-dimensional list where you calculate for each
 thickness the nu-value for 10 layers. Am I close?
 I'm still not sure about the steps and the height of the layers. I also
 wonder if it wouldn't be better to use a two-dimensional list.


 I have done this way as well (the other way around):

 height = arange((z)*dz,0,dz)
 for z,when in enumerate(height):
     for N in increments:
        h = hvalues[-1] - N
        hvalues.append(h)
        z = zvalues[-1] + h
        zvalues.append(z)
        nuh.append(0.001 * exp(-0.005*(z+200.0))*dz) #turbulence
 diffusivity m**2/s
        nu.append(num + nuh[z])

 but still no sign of 'nu changes' over 'z'!


 As Charles has already mentioned, the values for nu are very similar (they
 start beginning to differ just at the seventh digit after the comma). How do
 you further process this values? If you plot them what's your scale?

 Bye, Andreas

 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Do loop in Python

2011-11-25 Thread stm atoc
Hi there,

I am a new python user.
I have  a question regarding  do loop.

This is a simple program that I have written:

-
N=10
h=10.0 # [micrometer]
z=-200.0 # [micrometer]
num = 0.05 #m**2/s
dz = 1.0
nuh=[]
tmax=3600
dt=20.
nu=[]height = arange(z*dz,0,dz)

outfile=open('nu.dat','w')
outfile.write('height, nu, nuh')

for z,when in enumerate(height):
   for h in range(10):
   for N in range(10):
   for z in range((N-z)+(N-h)):

   nuh.append(0.01 * exp(-0.05*(z+200.0))*dz) #turbulence
diffusivity m**2/s
   nu.append(num + nuh[z])

---
What I like to do with this program is do loop like the fortran
version of  as follows:

do i = 2, N
 z(i) = z(i-1) +h(i-1)

end do

write(0,*) 'z ', z(1:N)
write(0,*) 'when ', 'nu ','Conc '


do i= 1, N

  nuh(i)= 0.01d0*exp(-0.005d2*(z(i)+200)) ! turbulence diffusivity m**2/s
  nu(i)= num(1) + nuh(i)


end do

--
My problem is I am notable have the curve in the output plot as I have
as a result of  FORTRAN program. What happens is just having a
straight line!
the whole problem is in z part, which is supposed to be changed and i
do not see it!

 So, would it be possible to take a look at it please. any suggestion
would greatly appreciated.

Thank you,
Sue
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Do loop in Python

2011-11-25 Thread stm atoc
regarding to the last email:


what  I am trying to do is seeing the variation of 'nu' over (changes of)  'z'.

My concern is how to arrange this!

Basically, I am not able to define the variation of  nu by z ( 1 to
200). I am looking for a statement to show the changes of 'nu' for
each step of z (as height).
On the other hand, for each step, 'h' is supposed to be subtracted
from 'z' (like: 200-10, 190-10...) as well, at least 10 times (which
was trying to be defined as N)!
I hope this is somehow clear

Thanks in advance,
Sue
- Show quoted text -
On Fri, Nov 25, 2011 at 10:16 AM, stm atoc stm.at...@googlemail.com wrote:
 Hi there,

 I am a new python user.
 I have  a question regarding  do loop.

 This is a simple program that I have written:

 -
 N=10
 h=10.0 # [micrometer]
 z=-200.0 # [micrometer]
 num = 0.05 #m**2/s
 dz = 1.0
 nuh=[]
 tmax=3600
 dt=20.
 nu=[]height = arange(z*dz,0,dz)

 outfile=open('nu.dat','w')
 outfile.write('height, nu, nuh')

 for z,when in enumerate(height):
   for h in range(10):
       for N in range(10):
           for z in range((N-z)+(N-h)):

               nuh.append(0.01 * exp(-0.05*(z+200.0))*dz) #turbulence
 diffusivity m**2/s
               nu.append(num + nuh[z])

 ---
 What I like to do with this program is do loop like the fortran
 version of  as follows:

 do i = 2, N
  z(i) = z(i-1) +h(i-1)

 end do

 write(0,*) 'z ', z(1:N)
 write(0,*) 'when ', 'nu ','Conc '


 do i= 1, N

  nuh(i)= 0.01d0*exp(-0.005d2*(z(i)+200)) ! turbulence diffusivity m**2/s
  nu(i)= num(1) + nuh(i)


 end do

 --
 My problem is I am notable have the curve in the output plot as I have
 as a result of  FORTRAN program. What happens is just having a
 straight line!
 the whole problem is in z part, which is supposed to be changed and i
 do not see it!

  So, would it be possible to take a look at it please. any suggestion
 would greatly appreciated.

 Thank you,
 Sue

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Do loop in Python

2011-11-25 Thread stm atoc
Thank you so much for your reply. It was very helpful information and
I used it in order to improve the program

Here is the new version of the program:

zvalues = [-200]  # starting value
hvalues = [10]  # starting value
increments = [1, 1, 1, 1, 1, 1, 1, 1]
for N in increments:
   h = hvalues[-1] - N
   hvalues.append(h)
   z = zvalues[-1] + h
   zvalues.append(z)
   height = arange((z)*dz,0,dz)
   for z,when in enumerate(height):
   nuh.append(0.001 * exp(-0.005*(z+200.0))*dz) #turbulence
diffusivity m**2/s
   nu.append(num + nuh[z])

The story is like this:
I should define layers and thickness and see how the diffusion profile
changes over the z.
height (or depth) of the total thickness or 'z'.
I basically, define 'z' in 10 layers and each layer is called  ' N' .
Difference between each layer is 'h', which is equal 10 micrometer.
Now, what I like to do is the modification of nu based on each zvalue
In fact, for each 'zvalue' o'z' step, I need to calculate a different
value for 'nu' based on the available equation in the program.

BUT, I am not sure, exactly, how to add the new do loop of z inside
another loop of nu.

I have done this way as well (the other way around):

height = arange((z)*dz,0,dz)
for z,when in enumerate(height):
for N in increments:
   h = hvalues[-1] - N
   hvalues.append(h)
   z = zvalues[-1] + h
   zvalues.append(z)
   nuh.append(0.001 * exp(-0.005*(z+200.0))*dz) #turbulence
diffusivity m**2/s
   nu.append(num + nuh[z])

but still no sign of 'nu changes' over 'z'!

So, would it be possible to check that again?

Thanks, Sue

On Fri, Nov 25, 2011 at 12:36 PM, Steven D'Aprano st...@pearwood.info wrote:
 stm atoc wrote:

 Hi there,

 I am a new python user.
 I have  a question regarding  do loop.

 This is a simple program that I have written:

 -
 N=10
 h=10.0 # [micrometer]
 z=-200.0 # [micrometer]

 You define N, h and z here, but later on you use them as loop variables. So
 these three values never get used: they are thrown away, and replaced by the
 values of the loops:

 h - 0, 1, 2, ... 9
 N - 0, 1, 2, ... 9

 z is especially troublesome, because it gets used for TWO loop variables,
 one inside the other. The inner z loop depends on the outer z loop, which
 makes it tricky to predict what values z will take.


 num = 0.05 #m**2/s
 dz = 1.0
 nuh=[]
 tmax=3600
 dt=20.
 nu=[]height = arange(z*dz,0,dz)

 What is arange?

 In physics, height is a scalar. But later on, you seen to use height as if
 it were a collection of values.


 outfile=open('nu.dat','w')
 outfile.write('height, nu, nuh')

 for z,when in enumerate(height):
   for h in range(10):
       for N in range(10):
           for z in range((N-z)+(N-h)):

               nuh.append(0.01 * exp(-0.05*(z+200.0))*dz) #turbulence
 diffusivity m**2/s
               nu.append(num + nuh[z])

 ---
 What I like to do with this program is do loop like the fortran
 version of  as follows:

 do i = 2, N
  z(i) = z(i-1) +h(i-1)

 end do


 How is z initialised? What is h?


 I *think* you are trying to add a small increment to each value, based on
 the previous value. Am I close?


 Does this example help?


 zvalues = [1]  # starting value
 increments = [0.01, 0.01, 0.02, 0.01, 0.01, 0.02, 0.01, 0.01]
 for h in increments:
    z = zvalues[-1] + h
    zvalues.append(z)

 print(zvalues)


 (Note: beware of floating point rounding.)




 --
 Steven

 ___
 Tutor maillist  -  Tutor@python.org
 To unsubscribe or change subscription options:
 http://mail.python.org/mailman/listinfo/tutor

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor