C++ の std::array を使って行列の積をつくる関数をつくろうとしてみました。
もっと汎用的なものが作れないかと思ったのですが、とりあえずは練習用ということで。何分、C++初心者なんで……。
ミソは関数の返り値としてarrayがそのまま使えるというやつですね。
test.cpp
#include <array>
#include <cstdio>
#define ARR(n) std::array<std::array<double,n>,n>
ARR(3) matmul(const ARR(3) amat, const ARR(3) bmat){
ARR(3) cmat={0};
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
cmat[i][j] += amat[i][k] * bmat[k][j];
}
}
}
return cmat;
}
int main(){
ARR(3) a={1,2,3,4,5,6,7,8,9};
ARR(3) b={9,8,7,6,5,4,3,2,1};
ARR(3) c=matmul(a,b);
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%5.1f,",c[i][j]);
}
printf("\n");
}
}
結果はこんな感じ。
$ clang++ test.cpp
$ ./a.exe
30.0, 24.0, 18.0,
84.0, 69.0, 54.0,
138.0,114.0, 90.0,
Libreoffice のCalcで検算してみました。
1 2 3 9 8 7 30 24 18
4 5 6 6 5 4 84 69 54
7 8 9 3 2 1 138 114 90
一応合ってるみたいです。
これ、ってこの前の [Vtuber][キズナアイ] 【ドッキリ】超キズナアイ好きVにいきなり本人登場ドッキリしたら号泣www の後日談ですね ^^
愛されてるなぁ。というかなんというか……。