LoginSignup
13
12

More than 5 years have passed since last update.

iOS SDKのvDSP APIリファレンスのメモ - その1

Last updated at Posted at 2013-10-22

iOS SDKに付属する vDSP API の関数の種類がめちゃくちゃ多いので整理。

公式リファレンスは以下から。
vDSP Reference - iOS Developer Library

一部、引数の表記を公式リファレンスから変更しています。
ヘッダファイル(vDSP.h)を参考にして、const が抜けているものを追加したり、
統一性を優先して引数名を意図的に変えました。


今回紹介する全ての関数を実行するサンプルコードをGitHubに載せています。
yuichiroharai/vDSP-sample - GitHub


簡単なものから順に何回かに分けてメモしていきます。

並べ替え

入れ替え

vDSP_vswap

void vDSP_vswap (
   float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_B,
   vDSP_Stride __vDSP_J,
   vDSP_Length __vDSP_N
);

vDSP_vswapD

void vDSP_vswapD (
   double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_B,
   vDSP_Stride __vDSP_J,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A と配列 __vDSP_B の中身を入れ替えます。


反転

vDSP_vrvrs

void vDSP_vrvrs (
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vrvrsD

void vDSP_vrvrsD (
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_C の各要素の並びを 反転 します。
入力と出力が同じ配列になります。


ソート

vDSP_vsort

void vDSP_vsort (
   float *__vDSP_C,
   vDSP_Length __vDSP_N,
   int __vDSP_OFLAG
);

vDSP_vsortD

void vDSP_vsortD (
   double *__vDSP_C,
   vDSP_Length __vDSP_N,
   int __vDSP_OFLAG
);

配列 __vDSP_C の各要素の並びを ソート します。
フラグ __vDSP_OFLAG1 の場合は 昇順 になり -1 の場合は 降順 になります。
入力と出力が同じ配列になります。


インデックスソート

vDSP_vsorti

void vDSP_vsorti (
   const float *__vDSP_C,
   vDSP_Length *__vDSP_IC,
   vDSP_Length *__vDSP_List_addr,
   vDSP_Length __vDSP_N,
   int __vDSP_OFLAG
);

vDSP_vsortiD

void vDSP_vsortiD (
   const double *__vDSP_C,
   vDSP_Length *__vDSP_IC,
   vDSP_Length *__vDSP_List_addr,
   vDSP_Length __vDSP_N,
   int __vDSP_OFLAG
);

配列 __vDSP_C の各要素を比較し、配列 __vDSP_IC の各要素の並びを ソート します。
あらかじめ、配列 __vDSP_IC の中身を 0, 1, ... , __vDSP_N-1 にしておくと、インデックス番号のソートになります。
配列 __vDSP_C の中身は変更されません。
フラグ __vDSP_OFLAG1 の場合は 昇順 になり -1 の場合は 降順 になります。
__vDSP_List_addr は使用されないので NULL を渡します。


値埋め / 値消去

値埋め

vDSP_vfill

void vDSP_vfill (
   const float *__vDSP_A,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vfillD

void vDSP_vfillD (
   const double *__vDSP_A,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vfilli

void vDSP_vfilli (
   const int *__vDSP_A,
   int *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_C の各要素を値 __vDSP_A で埋めます。


値消去

vDSP_vclr

void vDSP_vclr (
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vclrD

void vDSP_vclrD (
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_C の各要素を値 0 で埋めます。


絶対値 / 符号反転 / 小数部

正の絶対値

vDSP_vabs

void vDSP_vabs (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vabsD

void vDSP_vabsD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vabsi

void vDSP_vabsi (
   const int *__vDSP_A,
   vDSP_Stride __vDSP_I,
   int *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素の 絶対値 を配列 __vDSP_C の各要素に格納します。


負の絶対値

vDSP_vnabs

void vDSP_vnabs (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vnabsD

void vDSP_vnabsD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素の 絶対値-1 を掛けた値を配列 __vDSP_C の各要素に格納します。


符号反転

vDSP_vneg

void vDSP_vneg (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vnegD

void vDSP_vnegD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素に -1 を掛けた値を配列 __vDSP_C の各要素に格納します。


小数部

vDSP_vfrac

void vDSP_vfrac (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vfracD

void vDSP_vfracD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素の整数部を0にして小数部と符号のみを取り出した値を __vDSP_C の各要素に格納します。

例: -3.25-0.25 になります。


二乗

符号なし二乗

vDSP_vsq

void vDSP_vsq (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vsqD

void vDSP_vsqD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素の 二乗 を配列 __vDSP_C の各要素に格納します。


符号あり二乗

vDSP_vssq

void vDSP_vssq (
   const float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

vDSP_vssqD

void vDSP_vssqD (
   const double *__vDSP_A,
   vDSP_Stride __vDSP_I,
   double *__vDSP_C,
   vDSP_Stride __vDSP_K,
   vDSP_Length __vDSP_N
);

配列 __vDSP_A の各要素の 二乗 を配列 __vDSP_C の各要素に格納します。
ただし、 元が負の値の場合は結果も負の値 になります。


次回は四則演算辺りをまとめる予定です。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12