Переупорядочивание с помощью Accelerate framework

Я хотел бы использовать библиотеки Accelerate Framework для сортировки данных (пар значений x и y).

Я использовал функцию vDSP_vsorti, чтобы найти вектор с индексами упорядочения данных x. Теперь я должен изменить порядок данных y в соответствии с порядком индексов сортировки x.

Как я мог это сделать? Существует ли в Accelerate Framework функция для изменения порядка вектора?


person galuoises    schedule 24.06.2015    source источник
comment
Я вижу, что это C++, поэтому используйте std::sort с соответствующим предикатом.   -  person davidhigh    schedule 25.06.2015


Ответы (1)


Можно ли использовать vDSP_vgathr? Этот API захватывает значения из вектора, используя другой вектор индексов.

https://developer.apple.com/library/mac/documentation/Accelerate/Reference/vDSPRef/index.html#//apple_ref/c/func/vDSP_vgathr

Вот краткое изложение: Сбор одного вектора Функции в этой группе используют либо индексы, либо указатели, хранящиеся в одном исходном векторе, для создания нового вектора, содержащего выбранные элементы либо из второго исходного вектора, либо из памяти.

vDSP_vgathr Сбор векторов; одинарная точность.

Декларация SWIFT

func vDSP_vgathr(_ __vDSP_A: UnsafePointer<Float>, _ __vDSP_B: UnsafePointer<vDSP_Length>, _ __vDSP_J: vDSP_Stride, _ __vDSP_C: UnsafeMutablePointer<Float>, _ __vDSP_K: vDSP_Stride, _ __vDSP_N: vDSP_Length)

ЦЕЛЬ-C

void vDSP_vgathr ( const float *__vDSP_A, const vDSP_Length *__vDSP_B, vDSP_Stride __vDSP_IB, float *__vDSP_C, vDSP_Stride __vDSP_IC, vDSP_Length __vDSP_N ); Параметры __vDSP_A
Действительный входной вектор одинарной точности __vDSP_B
Целочисленный вектор, содержащий индексы __vDSP_J
Шаг для B __vDSP_C
Действительный выходной вектор одинарной точности __vDSP_K
Шаг для C __vDSP_N
Число элементов для обработки Обсуждение Выполняет следующую операцию:

Использует элементы вектора B в качестве индексов для копирования выбранных элементов вектора A в последовательные ячейки вектора C. Обратите внимание, что 1, а не ноль, рассматривается как первая позиция во входном векторе при оценке индексов. Эту функцию можно выполнять только не на своем месте.

person D. Donley    schedule 23.08.2015