Это можно сделать без зацикливания, однако мне было не совсем понятно, почему вы возвращали координаты только на половину строки, ie в моем примере последняя ненулевая строка - это координаты (4,9), следовательно, в пикселях () для строк установлено значение 5 вместо 10.
Исходная функция:
def pixels():
row,col = 10, 10
a =np.zeros((row*col,6))
k=0
for i in range(row):
for j in range(col):
if k<len(a):
a[k, 1:3]= [i,j] #Put pixsel coordinates in even rows -- 1. and 2. columns.
k = k + 2
return a
Новая функция с циклом:
def pix():
row,col = 5, 10
N = 2
a = np.meshgrid(np.arange(row), np.arange(col), indexing='ij')
b = np.transpose(a,np.roll(np.arange(N + 1), -1)).reshape(-1, N)
z=np.zeros_like(b)
s=np.hstack([b,z]).reshape(-1,2)
l = np.zeros((s.shape[0],1), dtype=np.int)
r = np.zeros((s.shape[0],3), dtype=np.int)
return np.hstack([l, s, r])
Сравнение:
>>> a=pix()
>>> b=pixels()
>>> np.all(b==a)
True
Производительность:
>>> timeit.timeit(pix, number=1000)
0.08045329099695664
>>> timeit.timeit(pixels, number=1000)
0.1498899580037687
Вывод pix ():
>>> a
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 3, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 8, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 9, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 3, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 8, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 9, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 3, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 8, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 9, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 3, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 8, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 3, 9, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 3, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 8, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 4, 9, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])