title: Numpy Vectorization of sliding-window operation
body: <p>I have the following numpy arrays:</p>
  
  <pre><code>arr_1 = [[1,2],[3,4],[5,6]]   # 3 X 2 
  arr_2 = [[0.5,0.6],[0.7,0.8],[0.9,1.0],[1.1,1.2],[1.3,1.4]]  # 5 X 2
  </code></pre>
  
  <p><code>arr_1</code> is clearly a <code>3 X 2</code> array, whereas <code>arr_2</code> is a <code>5 X 2</code> array. </p>
  
  <p>Now without looping, I want to element-wise multiply arr_1 and arr_2 so that I apply a sliding window technique (window size 3) to arr_2.</p>
  
  <pre><code>Example:
  
  Multiplication 1:  np.multiply(arr_1,arr_2[:3,:])
  
  Multiplication 2: np.multiply(arr_1,arr_2[1:4,:])
  
  Multiplication 3: np.multiply(arr_1,arr_2[2:5,:])
  </code></pre>
  
  <p>I want to do this in some sort of a matrix multiplication form to make it faster than my current solution which is of the form:</p>
  
  <pre><code>for i in (2):
     np.multiply(arr_1,arr_2[i:i+3,:])  
  </code></pre>
  
  <p>So if the number of rows in arr_2 are large (of the order of tens of thousands), this solution doesn't really scale very well.</p>
  
  <p>Any help would be much appreciated.</p>