I have several 2D numpy arrays (matrix) and for each one I would like to convert it to vector containing the values of the array and a vector containing each row/column index.>
Update November 2020 (tested on pandas v1.1.3 and numpy v1.19):
This should be a no-brainer by using np.meshgrid and .reshape(-1)
.
x = np.array([[3, 1, 4],
[1, 5, 9]])
x_coor, y_coor = np.meshgrid(range(x.shape[1]), range(x.shape[0]))
df = pd.DataFrame({"V": x.reshape(-1), "x": x_coor.reshape(-1), "y": y_coor.reshape(-1)})
For 2-dimensional cases, you don't even need a meshgrid. Just np.tile the range of the column axis and np.repeat for the row axis.
df = pd.DataFrame({
"V": x.reshape(-1),
"x": np.tile(np.arange(x.shape[1]), x.shape[0]),
"y": np.repeat(np.arange(x.shape[0]), x.shape[1])
})
The sample data is trimmed to shape=(2, 3)
to better reflect the axes location.
Result
print(df)
V x y
0 3 0 0
1 1 1 0
2 4 2 0
3 1 0 1
4 5 1 1
5 9 2 1