Я думаю, что лучшим способом было бы сначала создать массив с использованием генератора, а затем преобразовать его в numpy массив
// m, n = rows, cols
np.array([j*m + i for j in range(n) for i in range(m)]).reshape((m, n))
Однако это последовательность чисел вдоль строк, поэтому ее можно проще сделать как
np.array(range(m*n)).reshape((m, n))
Однако для этой библиотеки numpy также имеется встроенная функция arange
np.arange(m*n).reshape((m, n))
Надеюсь, это поможет.