Numpy: более быстрый доступ к массиву - PullRequest
0 голосов
/ 16 января 2020

Я написал небольшую python программу, в которой в одной функции я перебираю массив Numpy изображения. Почти все время выполнения происходит в одной маленькой части, где я получаю доступ к отдельным пикселям (у них есть значения RGB). Это выглядит примерно так:

arr #800x800 pixel
for x in range(height):
    for y in range(width):
        temp = [0,0,0]
        #prepare some stuff

        tmp[0]+=arr.item(x, y, 0) # This takes
        tmp[1]+=arr.item(x, y, 1) # almost all
        tmp[2]+=arr.item(x, y, 2) # the runtime

        #do some stuff with the values

Есть ли более быстрый способ доступа к значениям пикселей?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Используйте метод sum:

tmp = arr.sum((0, 1))

Никогда не нужно записывать явные значения массива l oop сверх numpy. Почти всегда существует векторизованное решение, которое работает намного быстрее.

1 голос
/ 16 января 2020

Используйте векторизацию, т. Е. По операциям с матрицами, а не по каждому элементу, например, добавление всей матрицы A + B (где A и B - две матрицы с одинаковыми размерами). То, что вы делаете, это то, что вы добавляете каждый элемент A вместе с элементом B, один за другим, что замедляет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...