Есть ли способ оптимизировать сравнение матрицы с набором образцов? - PullRequest
0 голосов
/ 15 февраля 2019

Это случай, когда 3D-камера транслирует карту глубины сцены.Разрешение камеры известно и равно (w, h), которое для этого примера установлено в (3, 2).

Я пытаюсь сравнить каждый новый кадр с мешком образцов.Каждый пиксель имеет одинаковое количество выборок для сравнения, которое известно и равно 4 для этого примера.Мешок с образцами имеет следующую форму (w, h, nb_sample), которая в данном примере равна (3, 2, 4).

Я делаю цикл от 0 до nb_sample, чтобы сравнить новый кадр с образцами.Если разница превышает пороговое значение R, счетчик увеличивается.

Вопрос: есть ли способ оптимизировать цикл?

import numpy as np

w = 3
h = 2
nb_sample = 4
R = 0.5

new_matrix = np.random.rand(w,h)

sample = np.random.rand(w, h, nb_sample)

count = np.zeros((w,h))

for index in range(0, nb_sample):
    distance = np.abs(new_matrix - sample[:, :, index])
    count[distance < R] += 1

print(count)

1 Ответ

0 голосов
/ 15 февраля 2019

Попробуйте это двухстрочное решение:

distance = np.abs(sample - new_matrix[:,:,np.newaxis])
np.sum(distance < R, axis = -1)

Объяснение :

Путем добавления измерения к new_matrix с помощью np.newaxis numpy может вычислить разницу длякаждая матрица в sample использует операцию -.

Тогда distance < R вычисляется так же, как в вашем коде.True и False представлены в Python как 1 и 0, поэтому их можно просто сложить вместе вдоль правой оси.

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