[SciPy-user] summation of array elements
Travis E. Oliphant
oliphant at ee.byu.edu
Wed Jun 30 15:06:40 EDT 2004
Horst Horstsen wrote:
> Hi Scipy-Experts,
>
> I've got a question concerning the summation of elements in an array.
> The following small sample programm illustrates the problem:
>
> _________________________________
> from scipy.xplt import *
> from RandomArray import *
>
> nx,ny=100,10
>
> def gen_lattice(nx,ny,c):
> x=uniform(0.0,1.0,((nx,ny)))
> return (x<c)
>
> c=1
> x=gen_lattice(nx,ny,c)
> print sum(x)
> print sum(ravel(x))
> ___________________________________
The problem is that you are using Numeric's sum instead of scipy's sum
and the x<c returns an array of 8 bit integers which is overflowing
(Numeric's sum is just short for add.reduce).
SciPy's sum check's this case.
In general, there should be no need to import Numeric separately and if
you do you run the risk of little buglets like this. One thing SciPy
tries to do is subsume your usage of Numeric (except for the experts)
so that a simple
from scipy import *
should suffice.
Here is the reworked code (notice you don't need to separately call
RandomArray which was the source of the problem)
from scipy import *
nx,ny = 100,10
def gen_lattice(nx,ny,c):
x = stats.uniform.rvs(size=(nx,ny))
return (x < c)
c = 1
x = gen_lattice(nx,ny,c)
print sum(x)
print sum(ravel(x))
>
> One would expect an output of ten 100s and a 1000 but instead of the
> 1000 it prints 232. Does anybody have a idea whats wrong?
>
> To anticipate corresponding questions, normally I also want to vary c
> between 0..1 ;-)
>
> Thank you for your help!
> Ciao by Philipp
>
>
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.net
> http://www.scipy.net/mailman/listinfo/scipy-user
More information about the SciPy-User
mailing list