title: More numpy way of iterating through the 'orthogonal' diagonals of a 2D array
body: <p>I have the following code that iterates along the diagonals that are orthogonal to the diagonals normally returned by <code>np.diagonal</code>. It starts at position (0, 0) and works its way towards the lower right coordinate.</p>
  
  <p>The code works as intended but is not very numpy with all its loops and inefficient in having to create many arrays to do the trick.</p>
  
  <p>So I wonder if there is a nicer way to do this, because I don't see how I would stride my array or use the diagonal-methods of numpy to do it in a nicer way (though I expect there are some tricks I fail to see).</p>
  
  <pre><code>import numpy as np
  
  A = np.zeros((4,5))
  
  #Construct a distance array of same size that uses (0, 0) as origo
  #and evaluates distances along first and second dimensions slightly
  #differently so that no values in the array is the same
  D = np.zeros(A.shape)
  for i in range(D.shape[0]):
      for j in range(D.shape[1]):
          D[i, j] = i * (1 + 1.0 / (grid_shape[0] + 1)) + j
  
  print D
  #[[ 0.          1.          2.          3.          4.        ]
  # [ 1.05882353  2.05882353  3.05882353  4.05882353  5.05882353]
  # [ 2.11764706  3.11764706  4.11764706  5.11764706  6.11764706]
  # [ 3.17647059  4.17647059  5.17647059  6.17647059  7.17647059]]
  
  #Make a flat sorted copy
  rD = D.ravel().copy()
  rD.sort()
  
  #Just to show how it works, assigning incrementing values
  #iterating along the 'orthagonal' diagonals starting at (0, 0) position
  for i, v in enumerate(rD):
  
      A[D == v] = i
  
  print A
  #[[ 0  1  3  6 10]
  # [ 2  4  7 11 14]
  # [ 5  8 12 15 17]
  # [ 9 13 16 18 19]]
  </code></pre>
  
  <p><strong>Edit</strong></p>
  
  <p>To clarify, I want to iterate element-wise through the entire <code>A</code> but doing so in the order the code above invokes (which is displayed in the final <code>print</code>). </p>
  
  <p>It is not important which direction the iteration goes along the diagonals (if 1 and 2 switched placed, and 3 and 5 etc. in <code>A</code>) only that the diagonals are orthogonal to the main diagonal of A (the one produced by <code>np.diag(A)</code>).</p>
  
  <p>The application/reason for this question is in my previous question (in the solution part at the bottom of that question): <a href="https://stackoverflow.com/questions/14242772/constructing-a-2d-grid-from-potentially-incomplete-list-of-candidates/">Constructing a 2D grid from potentially incomplete list of candidates</a></p>