【问题标题】:Reordering with Accelerate framework使用 Accelerate 框架重新排序
【发布时间】:2026-02-12 13:10:01
【问题描述】:

我想使用 Accelerate Framework 库对数据(x 和 y 值对)进行排序。

我使用函数 vDSP_vsorti 来查找具有 x 数据的排序索引的向量。现在我应该根据 x 排序索引顺序重新排序 y 数据。

我该怎么做? Accelerate Framework 中是否存在对向量重新排序的函数?

【问题讨论】:

  • 我看到它是 C++,所以使用 std::sort 和适当的谓词

标签: c++ accelerate-framework vdsp


【解决方案1】:

你可以使用 vDSP_vgathr 吗?此 API 使用另一个索引向量从一个向量中获取值。

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

这里是一个摘要: 单向量采集 该组中的函数使用存储在一个源向量中的索引或指针来生成一个新向量,该向量包含从第二个源向量或内存中选择的元素。

vDSP_vgathr 矢量聚集;单精度。

声明 斯威夫特

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,而不是零,被视为输入向量中的第一个位置。这个功能只能做错位了。

【讨论】: