Я пытаюсь сделать что-то вроде этого:
I[ x<sub>r1,c1</sub> > x<sub>r2,c2</sub> ]
, где r i , c i ∈ {0,1,2, ..., n} - индексы строк и столбцов соответственно, а I [·] - это функция индикатора, значение которой равно 1, если условие истинно, и 0, в противном случае.
У меня проблемы с настройкой,Я могу легко перебрать все по:
for r1 in range(0,n):
for c1 in range(0,n):
for r2 in range(0,n):
for c2 in range(0,n):
#do something with (r1,c1,r2,c2)
Однако я пытаюсь векторизовать этот код, чтобы повысить эффективность и сделать сравнения одним махом.Как я могу это сделать?Я использую numpy .
обновление объяснения:
я тренирую простой классификатор улыбки, которыйанализирует изображение в градациях серого x ∈ R 24 × 24 и выводит прогноз y ∈ {0,1}, указывающий, является ли изображение улыбающимся (1) или нет (0).классификатор будет принимать решение на основе очень простых характеристик входного изображения, состоящих из двоичных сравнений между значениями пикселей.
каждая функция вычисляется как:
I[ x<sub>r1,c1</sub> > x<sub>r2,c2</sub> ]
где r i, c i ∈ {0,1,2, ..., n} - индексы строк и столбцов соответственно, а I [·] - индикаторная функция, значение которой равно 1, еслиусловие истинно и 0 в противном случае.(предположим, что n определено)
на основании того, что я упомянул до сих пор, я пытаюсь обучить ансамблевую классификацию улыбки для 5 функций.выходной сигнал ансамбля равен 1, если он думает, что изображение улыбается, и 0 в противном случае.это определяется средним прогнозом по всем 5 членам ансамбля.если более половины из 5 предсказателей ансамбля считают, что изображение улыбается, тогда ансамбль говорит, что это улыбка;в противном случае ансамбль говорит, что не улыбается.
это то, что я пытаюсь сделать:
в каждом раунде j, я хочу выбрать функцию jth (r1, c1, r2, c2) так, чтобы - когда она была добавленак набору j-1 признаков, которые уже были выбраны - точность общего классификатора на обучающем наборе максимальна.более конкретно, в каждом раунде j я рассматриваю каждый возможный кортеж местоположений пикселей (r1, c1, r2, c2), если текущий кортеж еще лучший (для раунда j), то я сохраняю его как свой «лучше всего увиденный еще».За раунд j.если нет, я игнорирую это.Затем я перехожу к следующему возможному кортежу местоположений пикселей и повторяюсь, пока не буду искать их все.В конце раунда j я выберу лучшую функцию для этого раунда и добавлю ее в свой набор выбранных функций.однажды добавленный, он остается в наборе навсегда - его нельзя удалить.(иначе, это не будет согласованный алгоритм вообще.) Затем я перехожу к раунду j + 1, пока вы не закончите все 5 раундов.
Мне не нужна помощь во всем этом.я просто ищу способ векторизовать код без использования вложенных циклов