どのようなライブラリーを使うのかといったことがわからないのあさっての方向を向いたコメントかも知れませんが・・・
x,yがベクトル(一次元配列)と仮定し、
(A) xyが要素同士を乗算した結果のベクトルを得る演算
(B) x^T*yがxとyのドット積(内積)を得る演算
とするなら数式上転置行列の記号はでてきますがそれを正直に「C言語で転置するにはどうすれば・・・」と考える必要なないと思います。
C
1#define N ...
2
3
4// (A)
5
6void multiply(double x[], double y[], result[]) {
7 for (int i = 0; i < N; i++) {
8 result[i] = x[i] * y[i];
9 }
10}
11
12// (B)
13
14double dot_product(double x[], double y[]) {
15 double result = 0;
16 for (int i = 0; i < N; i++) {
17 result += x[i] * y[i];
18 }
19 return result;
20}
と書けばよいだけの話ではないでしょうか?またx,yが2次元配列にしたとしても同様に「必ずしも正直に転置する必要はない」と言えると思います。計算する際に用いるインデックスの順番に配慮しながら関数を定義すればわざわざ転置する必要はないとも言えます。
しかしながら関数の仕様として「L×Mの行列とM×Nの行列の積を計算してL×Nの行列を返す」といった汎用的に使えるものを考えるなら、その関数の入力にするために転置が必要なこともあるでしょう。
ご質問ではどういう設計にしようとしているか閲覧者に見えてきません。ですのでどうしたらいいかコメントしづらい気がします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/25 15:38