title: Python: Sliding windowed mean, ignoring missing data
body: <p>I am currently trying to process an experimental timeseries dataset, which has missing values. I would like to calculate the sliding windowed mean of this dataset along time, while handling nan values. The correct way for me to do it is to compute inside each window the sum of the finite elements and divide it with their number. This nonlinearity forces me to use non convolutional methods to face this problem, thus I have a severe time bottleneck in this part of the process. As a code example of what I am trying to accomplish I present the following:</p>
  
  <pre><code>import numpy as np
  #Construct sample data
  n = 50
  n_miss = 20
  win_size = 3
  data= np.random.random(50)
  data[np.random.randint(0,n-1, n_miss)] = None
  
  #Compute mean
  result = np.zeros(data.size)
  for count in range(data.size):
      part_data = data[max(count - (win_size - 1) / 2, 0): min(count + (win_size + 1) / 2, data.size)]
      mask = np.isfinite(part_data)
      if np.sum(mask) != 0:
          result[count] = np.sum(part_data[mask]) / np.sum(mask)
      else:
          result[count] = None
  print 'Input:\t',data
  print 'Output:\t',result
  </code></pre>
  
  <p>with output:</p>
  
  <pre><code>Input:  [ 0.47431791  0.17620835  0.78495647  0.79894688  0.58334064  0.38068788
    0.87829696         nan  0.71589171         nan  0.70359557  0.76113969
    0.13694387  0.32126573  0.22730891         nan  0.35057169         nan
    0.89251851  0.56226354  0.040117           nan  0.37249799  0.77625334
           nan         nan         nan         nan  0.63227417  0.92781944
    0.99416471  0.81850753  0.35004997         nan  0.80743783  0.60828597
           nan  0.01410721         nan         nan  0.6976317          nan
    0.03875394  0.60924066  0.22998065         nan  0.34476729  0.38090961
           nan  0.2021964 ]
  Output: [ 0.32526313  0.47849424  0.5867039   0.72241466  0.58765847  0.61410849
    0.62949242  0.79709433  0.71589171  0.70974364  0.73236763  0.53389305
    0.40644977  0.22850617  0.27428732  0.2889403   0.35057169  0.6215451
    0.72739103  0.49829968  0.30119027  0.20630749  0.57437567  0.57437567
    0.77625334         nan         nan  0.63227417  0.7800468   0.85141944
    0.91349722  0.7209074   0.58427875  0.5787439   0.7078619   0.7078619
    0.31119659  0.01410721  0.01410721  0.6976317   0.6976317   0.36819282
    0.3239973   0.29265842  0.41961066  0.28737397  0.36283845  0.36283845
    0.29155301  0.2021964 ]
  </code></pre>
  
  <p>Can this result be produced by numpy operations, without using a for loop?</p>