concatenate Numeric

Sheldon shejo284 at gmail.com
Mon Jul 10 04:34:25 EDT 2006


Robert Kern wrote:
> Sheldon wrote:
> > Hi,
> >
> > I am trying to build a large array using concatenate function in
> > python.
> > So as I loop over the number of arrays, of which there are 12 (4 down
> > and 3 across), I create 3 long arrays by concatenating them at the
> > bottom and then concatenating them side by side:
>
> [snip]
>
> > print 'Max lat', max(max(ppslat_all)), '\t','Min lat',
> > min(min(ppslat_all))
> > print 'Max lon', max(max(ppslon_all)), '\t','Min lon',
> > min(min(ppslon_all))
> >
> > *****************
> > Now this works, the array size is correct but the longitude values
> > given for max and min are wrong. What is even stranger to me is that
> > when I write the array in binary format to a file and read it with
> > Matlab, the max and min are correct but when I read it back with python
> > the max and min are again incorrect for only the longitude data. I
> > saved the max and min for the longitude for each array and then check
> > it in the python program and they are correct at the end but the
> > max(max(ppslon)) values is incorrect.  Does anyone knows why this is
> > so?
> > If I was doing something wrong then Matlab would not have returned
> > correct values.
>
> Don't use min() and max() on multidimensional arrays. They won't give sensible
> answers.
>
>
> In [11]: a = RA.random([3,5])
>
> In [12]: a
> Out[12]:
> array([[ 0.01721657,  0.64291363,  0.33210659,  0.89887972,  0.24437849],
>         [ 0.88205348,  0.00839329,  0.35999039,  0.9966411 ,  0.54957126],
>         [ 0.59983864,  0.18983323,  0.13727718,  0.8987289 ,  0.05425076]])
>
> In [13]: min(a)
> Out[13]: array([ 0.59983864,  0.18983323,  0.13727718,  0.8987289 ,  0.05425076])
>
>
> The builtin min() and max() compare the values in the sequence. In this case,
> those values are the rows of the arrays. Numeric uses rich comparisons, so the
> result of a comparison is a boolean array. Numeric also has the convention that
> if any of the elements of an array are considered to be True, then the whole
> array is.
>
>
> In [16]: a[1] < a[2]
> Out[16]: array([0, 1, 0, 0, 0])
>
> In [17]: bool(_)
> Out[17]: True
>
> In [18]: a[2] < a[1]
> Out[18]: array([1, 0, 1, 1, 1])
>
> In [19]: bool(_)
> Out[19]: True
>
>
> This makes min(a) incorrect when len(a.shape) > 1. Instead, use the minimum and
> maximum ufuncs provided with Numeric:
>
>
> In [21]: N.minimum.reduce(a.flat)
> Out[21]: 0.0083932917161983426
>
> In [22]: N.maximum.reduce(a.flat)
> Out[22]: 0.99664110397663608
>
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless enigma
>   that is made terrible by our own mad attempt to interpret it as though it had
>   an underlying truth."
>    -- Umberto Eco

Hi Robert,

Thanks again for showing me this. I have been trying to read up on
reduce() as I have never used it before. I would like to know what it
does. So far my search has found nothing that I can grasp. The
reference library notes are estoteric at best.
Can you enlighten me on this matter?'

/Sheldon




More information about the Python-list mailing list