Переключатель/корпус будет особенно медленным и негибким.
changm принимает матрицу и два вектора значений, новые и старые. Если запись найдена в старом списке, она заменяется соответствующей записью в новом списке. Таким образом, это по своей сути будет довольно медленным, вам нужно передать всю матрицу, выполнить поиск в старом списке, и если и запись найдена, замените ее новым списком. Как вы можете ускорить его? Во-первых, не перекодируйте в качестве переключателя/случая. Современный компилятор, возможно, оптимизирует цикл, а не много прыжков, но я бы не стал его гарантировать. И этот подход негибкий. Во-вторых, вы можете сортировать «старый» вектор и использовать двоичный поиск, а не линейный. Это значительно поможет, если старый вектор длинный. В-третьих, вы можете воспользоваться тем, что знаете о матрице. Сохраняются ли старые ценности в определенных регионах? Есть ли одно значение, которое в большинстве случаев вероятнее всего и может быть проверено для первого? Можете ли вы быстро исключить некоторые значения, которые не разрешены в старом списке (слишком большой, слишком маленький, а не интегральный).
Являются ли старые значения целыми числами и вы можете использовать индексирование? Или обобщите это на хеширование. Это было бы даже быстрее, чем двоичный поиск, хотя с большим количеством накладных расходов для хэширования. Можете ли вы решить проблему другим способом и сохранить индекс матрицы xy по значению?
Существует множество подходов. Но просто реализуем функцию Matlab наивно в C как первый шаг. Это может быть достаточно быстро.
Спасибо за ваш комментарий. Я закончил тем, что просто выполнил это как таблицу поиска, так как существует только 8 возможных значений (однако векторы, которые я хочу выполнить для свопа, довольно велики - тысячи элементов). Тем не менее, избавляясь от переключателя/случая и некоторой осторожной реализации, он теперь в 10 раз быстрее. – NOP