Как получить координату только одного элемента в массиве NumPy - PullRequest
0 голосов
/ 15 декабря 2018

Так что это мой код.Я не хочу получать все координаты значений пикселей ниже 210, потому что я хочу выполнить с ними некоторую операцию и, возможно, скорректировать условие в зависимости от результата этой операции.

filename = "/home/User/PycharmProjects/Test/files/1366-000082.png"

image = Image.open(filename)

image_data = np.asarray(image, dtype='int64')

def get_image_data():
     for row in image_data:
         for cell in row:
             if condition:
                 # I need only coordinate of cell here

Итак, я снова в курсефункции argwhere.Но это только дает мне все координаты.Но я мог бы хотеть изменить это условие где-нибудь в цикле.

Это вообще возможно?

В противном случае мне придется использовать подушку, но тогда цикл будет в 10 раз медленнее.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вы можете использовать enumerate () для получения индексов значений:

def get_image_data():
    for row_number, row in enumerate(image_data):
        for column_number, cell in enumerate(row):
            if condition:
                # I need only coordinate of cell here
                print(row_number, column_number)

и, возможно, вам следует передать image_data в метод get_image_data

0 голосов
/ 15 декабря 2018

Вы смотрели на использование маски?Это должно сделать вашу жизнь намного проще и быстрее, так как благодаря встроенным функциям массива NumPy вам не придется проходить весь цикл.

В качестве примера для вас:

A = np.random.randint(1, 500, (100,100)) Mask = A < 210

Это даст вам матрицу истинных / ложных значений, которые вы можете по существу запрашивать и корректировать записи по своему усмотрению.Я знаю, что вы не хотите иметь дело со всеми координатами, но это будет намного быстрее, чем циклически проходить через значения ваших пикселей.

Надеюсь, это поможет вам

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