Accelerate framework ios: самый быстрый расчет пифагорена

Итак, у меня есть 2 матрицы: каждая 100x100.

Я хочу рассчитать третью матрицу, такую ​​​​что: M3 [i] = sqrt (M1 [i] ^ 2 + M2 [i] ^ 2).

Я, очевидно, могу делать ForLoops, но я уверен, что есть что-то быстрее.

Я покопался в фреймворке ускорений и заблудился в мире Linpack

Любая помощь, чтобы получить меня на правильном пути ...

Спасибо


person Khaled Barazi    schedule 30.01.2013    source источник


Ответы (2)


Фреймворк Accelerate — хорошая идея.

Вы можете использовать такую ​​функцию, как vDSP_vsq для работы с одним столбцом матрицы за раз, помещая результат в соответствующий столбец M3. Возможно, вам придется создать две результирующие матрицы (одна будет M1^2, другая M2^2), а затем сложить их, чтобы сформировать правильную результирующую матрицу M3, добавив столбцы с вызовом vDSP_vadd, который, опять же, , сможет работать с одной колонкой за раз.

Пример кода (показывающий, как добавить два вектора и т. д.) здесь, на странице разработчиков Apple.

person Chris McGrath    schedule 30.01.2013
comment
Спасибо, что указали мне правильное направление. Не показалось, что какие-то vDSP-функции работают на int и мне пришлось бы проходить преобразование в float. это правильно? - person Khaled Barazi; 31.01.2013
comment
Правильно — для преобразования можно использовать другую функцию vDSP, например vDSP_vflt32. - person Chris McGrath; 31.01.2013

Я думаю, что самый быстрый способ - использовать

vDSP_vpythg Вектор Пифагора; одинарная точность.

Вычитает вектор C из A и возводит в квадрат разности, вычитает вектор D из B и возводит в квадрат разности, складывает два набора квадратов разностей, а затем записывает квадратные корни сумм в вектор E.

Очевидно, передайте ZERO вектор для C и D .

person jackdev23    schedule 20.02.2013