ぬけてるエンジニアの備忘録

イケてない情報の掃き溜め。。。

【iOS】行列計算,ベクトル処理ライブラリを使ってみた

iOSでベクトルや行列を処理できるライブラリを探しているとAccelerate.frameworkに提供されている事が分かったので早速使ってみた。因みに今回使う機能はiOS8以上が対象なので注意が必要です。


今回はObjective-Cでのサンプル

#import <Accelerate/Accelerate.h>
double x[] = {
    1, 2, 3,
    4, 5, 6,
    7, 8, 9
};
la_object_t matX = la_matrix_from_double_buffer(x,3,3,3,LA_NO_HINT,LA_DEFAULT_ATTRIBUTES);
    
double y[] = {
    4, 5, 6,
    1, 2, 3,
    7, 8, 9
};
la_object_t matY = la_matrix_from_double_buffer(y,3,3,3,LA_NO_HINT,LA_DEFAULT_ATTRIBUTES);

まずは2つの行列をこんな感じで用意してみる。
引数に行列の情報や計算に必要なヒント、属性なんかを指定して初期化できる。

double z[] = {
    1,
    2,
    3
};
la_object_t matZ = la_matrix_from_double_buffer(z,3,1,1,LA_NO_HINT,LA_DEFAULT_ATTRIBUTES);

ちなみに行3列1とかだとこんな感じ。

la_object_t matXY = la_matrix_product(matX, matY);

double buf[] = {
    0, 0, 0,
    0, 0, 0,
    0, 0, 0
};

la_matrix_to_double_buffer(buf, la_matrix_cols(matXY), matXY);

// buf[]をLog出力する
// 27.0 33.0 39.0
// 63.0 78.0 93.0
// 99.0 123.0 147.0

行列同士で積を求めてみる。
ほかにも色々とできそうだけど、とりあえずここまで。