Я имею дело с большим количеством данных, и меня беспокоит эффективность моих операций в масштабе. После бенчмаркинга среднее время выполнения этой строки кода составляет около 0,004 сек. Цель этой строки кода - найти разницу между двумя значениями в каждом местоположении массива. В предыдущей операции 111.111 был загружен в массивы в местах, содержащих недопустимые данные. Из-за некоторых странных вопросов во временном домене мне нужно было это сделать, потому что я не мог просто удалить значения, и мне нужен был какой-то отличимый заполнитель. Вместо этого я мог бы использовать здесь «ноль». В любом случае, вернемся к объяснению. Эта строка кода проверяет, чтобы ни один массив не имел этот 111.111 placeholder в текущем местоположении. Если значения действительны, я выполняю математическую операцию, иначе я хочу удалить значения (или, по крайней мере, исключить их из нового массива, к которому я пишу). Я выполнил это по месту «нуль» в этом месте, а затем впоследствии уплотнил массив.Ruby: Повышение эффективности
Время 0,004 секунды для 4000 точек данных в каждом массиве не страшно, но эта строка кода выполняется 25M раз. Я надеюсь, что кто-то сможет предложить некоторое представление о том, как я могу оптимизировать эту строку кода.
temp_row = row_1.zip(row_2).map do |x, y|
x == 111.111 || y == 111.111 ? nil : (x - y).abs
end.compact
'zip' здесь совершенно не нужен. –
И да, 4000% улучшение от создания 5000 потоков - это фантазия :) –
Без почтового индекса: http://pastie.org/10881223 –