Вы бы использовали np.meshgrid
так:
# Make coordinate grids
x, y = np.meshgrid(np.arange(arr.shape[0]), np.arange(arr.shape[1]), indexing='ij')
# Flatten grid and data and stack them into a single array
data = np.stack([x.ravel(), y.ravel(), arr.ravel()], axis=1)
Например:
import numpy as np
arr = np.arange(12).reshape((3, 4))
x, y = np.meshgrid(np.arange(arr.shape[0]), np.arange(arr.shape[1]), indexing='ij')
data = np.stack([x.ravel(), y.ravel(), arr.ravel()], axis=1)
print(data)
Выход:
[[ 0 0 0]
[ 0 1 1]
[ 0 2 2]
[ 0 3 3]
[ 1 0 4]
[ 1 1 5]
[ 1 2 6]
[ 1 3 7]
[ 2 0 8]
[ 2 1 9]
[ 2 2 10]
[ 2 3 11]]
EDIT:
На самом деле, если вы хотите, чтобы ваш окончательный массив был таким, чтобы значения x
сначала увеличивались (как в приведенном вами примере), вы можете сделать это следующим образом:
x, y = np.meshgrid(np.arange(arr.shape[0]), np.arange(arr.shape[1]), indexing='xy')
data = np.stack([x.ravel(), y.ravel(), arr.T.ravel()], axis=1)
В этом случае вы получите:
[[ 0 0 0]
[ 1 0 4]
[ 2 0 8]
[ 0 1 1]
[ 1 1 5]
[ 2 1 9]
[ 0 2 2]
[ 1 2 6]
[ 2 2 10]
[ 0 3 3]
[ 1 3 7]
[ 2 3 11]]