I have a ndarray A of arbitrary number of dimensions N. I want to create an array B of tuples (array, or lists) where the first N elements in each tuple are the index and the last element is the value of that index in A.
For example:
A = array([[1, 2, 3], [4, 5, 6]])
Then
B = [(0, 0, 1), (0, 1, 2), (0, 2, 3), (1, 0, 4), (1, 1, 5), (1, 2, 6)]
What is best/fastest way to do this in NumPy without for loops?
解决方案
If you have Python 3 a very simple (and moderately fast) way would be (using np.ndenumerate):
>>> import numpy as np
>>> A = np.array([[1, 2, 3], [4, 5, 6]])
>>> [(*idx, val) for idx, val in np.ndenumerate(A)]
[(0, 0, 1), (0, 1, 2), (0, 2, 3), (1, 0, 4), (1, 1, 5), (1, 2, 6)]
It would be a bit different if you want it to work for both Python 3 and Python 2,