Итерировать размер изображения без использования l oop? - PullRequest
0 голосов
/ 24 апреля 2020
row,col = 4000, 4000  
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

Существует изображение с размером 4000, 4000, и я хочу повторить координаты пикселя в каждой точке (размер итерации). Я сделал это, как описано выше. Но размер изображения большой, и этот процесс занимает много времени. Есть ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 24 апреля 2020

Это можно сделать без зацикливания, однако мне было не совсем понятно, почему вы возвращали координаты только на половину строки, 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]])
...