# [Tutor] finding a maximum between the absolute difference of several columns

Andre' Walker-Loud walksloud at gmail.com
Fri Feb 17 07:38:04 CET 2012

```Hi Elaina,

> Vhel_fdiff3=[]
> for i in xrange(len(Vmatch3_1)):
>     Vhel_fdiff3.append(max([abs(Vmatch3_1[i] - Vmatch3_2[i]),abs(Vmatch3_1[i] - Vmatch3_3[i]),abs(Vmatch3_3[i] - Vmatch3_2[i])]))
>
> #print Vhel_fdiff3
> #appending writes a list, but numpy which makes the with_ work needs an array
> Vhel_fdiff3=array(Vhel_fdiff3)

You can skip making the list and directly make a numpy array.

"""
import numpy as np
...
Vhel_fdiff3 = np.zeros_like(Vmatch3_1)
for i in xrange(len(Vmatch3_1):
Vhel_fdiff3[i] = max(abs(Vmatch3_1[i] - Vmatch3_2[i]),abs(Vmatch3_1[i] - Vmatch3_3[i]),abs(Vmatch3_3[i] - Vmatch3_2[i]))
"""

But, more importantly, you can do it all in numpy - have a read about the "max" function

Given an 2-dimensional array, you can find the max for each row or each column by specifying which axis you want to compare against.  Almost surely, the built in numpy function will be faster than your loop - even if you precompile it by importing your functions in another file.  You can do something like

"""
import numpy as np
Vhel_fdiff3 = np.array([abs(Vmatch3_1 - Vmatch3_2), abs(Vmatch3_1 - Vmatch3_3), abs(Vmatch3_3 - Vmatch3_2)]) #create an array of the absolute values of the differences of each pair of data
# Vhel_fdiff3 is a 2D array
# the first index runs over the three pairs of differences
# the second index runs over the elements of each pair
# to get the maximum difference, you want to compare over the first axis (0)