C++ 线性代数操作:矩阵减法、矩阵乘法和哈达玛积
这段代码用 C++ 实现三个线性代数中常用的操作:矩阵的减法、矩阵的乘法和哈达玛积。
- 矩阵减法:将两个矩阵对应元素相减得到一个新的矩阵。
- 矩阵乘法:将两个矩阵相乘得到一个新的矩阵。
- 哈达玛积:将两个矩阵对应元素相乘得到一个新的矩阵。
代码使用 std::vector 容器来存储矩阵,其中每个元素是一个 std::vector 容器,表示矩阵的一行。首先,通过 resize 函数设置矩阵 C 的大小,然后依次遍历两个矩阵 A 和 B 的每一个元素,进行相应的操作,最后返回新的矩阵 C。
其中,矩阵乘法需要进行三重循环,分别遍历矩阵 A 的每一行、矩阵 B 的每一列和矩阵 A 的每一列(或矩阵 B 的每一行),计算得到新的矩阵 C 中对应元素的值。
std::vector<std::vector<double>> LinAlg::subtraction(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
std::vector<std::vector<double>> C;
C.resize(A.size());
for(int i = 0; i < C.size(); i++){
C[i].resize(A[0].size());
}
for(int i = 0; i < A.size(); i++){
for(int j = 0; j < A[0].size(); j++){
C[i][j] = A[i][j] - B[i][j];
}
}
return C;
}
std::vector<std::vector<double>> LinAlg::matmult(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
std::vector<std::vector<double>> C;
C.resize(A.size());
for(int i = 0; i < C.size(); i++){
C[i].resize(B[0].size());
}
for(int i = 0; i < A.size(); i++){
for(int k = 0; k < B.size(); k++){
for(int j = 0; j < B[0].size(); j++){
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
std::vector<std::vector<double>> LinAlg::hadamard_product(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
std::vector<std::vector<double>> C;
C.resize(A.size());
for(int i = 0; i < C.size(); i++){
C[i].resize(A[0].size());
}
for(int i = 0; i < A.size(); i++){
for(int j = 0; j < A[0].size(); j++){
C[i][j] = A[i][j] * B[i][j];
}
}
return C;
}
原文地址: https://www.cveoy.top/t/topic/n2nh 著作权归作者所有。请勿转载和采集!