thanks for all of your help, that does look appropriate but I am not sure how to loop it over thousands of files.
I need to keep the first array to compare with but replace any greater values as I loop through each array comparing back to the same array. does that make sense?


On Wed, Dec 7, 2011 at 1:12 PM, Olivier Delalleau <shish@keba.be> wrote:
Thanks, I didn't know you could specify the out array :)

(to the OP: my initial suggestion, although probably not very efficient, seems to work with 2D arrays too, so I have no idea why it didn't work for you -- but Nathaniel's one seems to be the ideal one anyway).

-=- Olivier


2011/12/6 Nathaniel Smith <njs@pobox.com>

I think you want
  np.maximum(a, b, out=a)

- Nathaniel

On Dec 6, 2011 9:04 PM, "questions anon" <questions.anon@gmail.com> wrote:
thanks for responding Josef but that is not really what I am looking for, I have a multidimensional array and if the next array has any values greater than what is in my first array I want to replace them. The data are contained in netcdf files.
I can achieve what I want if I combine all of my arrays using numpy concatenate and then using the command numpy.max(myarray, axis=0) but because I have so many arrays I end up with a memory error so I need to find a way to get the maximum while looping.



On Wed, Dec 7, 2011 at 12:36 PM, <josef.pktd@gmail.com> wrote:
On Tue, Dec 6, 2011 at 7:55 PM, Olivier Delalleau <shish@keba.be> wrote:
> It may not be the most efficient way to do this, but you can do:
> mask = b > a
> a[mask] = b[mask]
>
> -=- Olivier
>
> 2011/12/6 questions anon <questions.anon@gmail.com>
>>
>> I would like to produce an array with the maximum values out of many
>> (10000s) of arrays.
>> I need to loop through many multidimentional arrays and if a value is
>> larger (in the same place as the previous array) then I would like that
>> value to replace it.
>>
>> e.g.
>> a=[1,1,2,2
>> 11,2,2
>> 1,1,2,2]
>> b=[1,1,3,2
>> 2,1,0,0
>> 1,1,2,0]
>>
>> where b>a replace with value in b, so the new a should be :
>>
>> a=[1,1,3,2]
>> 2,1,2,2
>> 1,1,2,2]
>>
>> and then keep looping through many arrays and replace whenever value is
>> larger.
>>
>> I have tried numpy.putmask but that results in
>> TypeError: putmask() argument 1 must be numpy.ndarray, not list
>> Any other ideas? Thanks

if I understand correctly it's a minimum.reduce

numpy

>>> a = np.concatenate((np.arange(5)[::-1], np.arange(5)))*np.ones((4,3,1))
>>> np.minimum.reduce(a, axis=2)
array([[ 0.,  0.,  0.],
      [ 0.,  0.,  0.],
      [ 0.,  0.,  0.],
      [ 0.,  0.,  0.]])
>>> a.T.shape
(10, 3, 4)

python with iterable

>>> reduce(np.maximum, a.T)
array([[ 4.,  4.,  4.,  4.],
      [ 4.,  4.,  4.,  4.],
      [ 4.,  4.,  4.,  4.]])
>>> reduce(np.minimum, a.T)
array([[ 0.,  0.,  0.,  0.],
      [ 0.,  0.,  0.,  0.],
      [ 0.,  0.,  0.,  0.]])

Josef

>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion



_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion