title: Fast performance array processing in Numpy/Python
body: <p>I am trying to find out the optimal way (fastest performance) to process coordinate and measurement data stored in several numpy arrays.</p>
  
  <p>I need to calculate the distance from each grid point (lot, lon, alt value in green in the attached image) to each measurement location (lat, lon, alt, range from target in gray in the attached image). Seeing as there are hundreds of grid points, and thousands of measurement ranges to calculate for each grid point, I would like to iterate through the arrays in the most efficient way possible</p>
  
  <p><img src="https://i.stack.imgur.com/BxImC.png" alt="enter image description here"></p>
  
  <p>I am trying to decide between how to store the LLA measurements for the grid and measurements, and then what the ideal way is to calculate the Mean Squared Error for each point on the grid based on the delta between the measured range value and the actual range.</p>
  
  <p>Any ideas on how to best store these values, and then iterate across the grid to determine the range from each measurement would be very much appreciated. Thanks!!!</p>
  
  <p>Currently, I am using a 2D meshgrid to store the LLA values for the grid</p>
  
  <pre><code># Create a 2D Grid that will be used to store the MSE estimations
  # First, create two 1-D arrays representing the X and Y coordinates of our grid
  x_delta = abs(xmax-xmin)/gridsize_x
  y_delta = abs(ymax-ymin)/gridsize_y
  X = np.arange(xmin,xmax+x_delta,x_delta)
  Y = np.arange(ymin,ymax+y_delta,y_delta)
  
  # Next, pass arrays to meshgrid to return 2-D coordinate matrices from the 1-D coordinate arrays
  grid_lon, grid_lat = np.meshgrid(X, Y)
  </code></pre>
  
  <p>I have the LLA points and range values from the measurements stored in a measurement class</p>
  
  <pre><code>measurement_lon = [measurement.gps.getlon() for measurement in target_measurements]
  measurement_lat = [measurement.gps.getlat() for measurement in target_measurements]
  measurement_range = [measurement.getrange() for measurement in target_measurements]
  </code></pre>
  
  <p>Measurement class</p>
  
  <pre><code>class RangeMeasurement:
  
  def __init__(self, lat, lon, alt, range):
    self.gps = GpsLocation(lat,lon,alt)
    self.range = range
  </code></pre>
  
  <p>Really bad pseudocode for range calculation (iterative and very slow)</p>
  
  <pre><code>for i in len(grid_lon):
    for j in len(measurement_lat):
      range_error += distance(grid_lon[i],grid_lat[i],measurement_lon[j],measurement_lat[j])-measurement_range[j]      
  </code></pre>