#include <stdio.h>
void matrixMultiply(int rows, int m, int cols, float *A, float *B, float *C);
void matrixAdd(int rows, int cols, float *A, float *B, float *C);
void matrixTransposeMultiply(int rows, int m, int cols, float *A, float *B, float *C);
void matrixSub(int rows, int cols, float *A, float *B, float *C);
void matrixMultiply(int rows, int m, int cols, float *A, float *B, float *C) {
/* C(rows*cols) = A(rows*m)*B(m*cols) */
int i, j, k;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
C[i * cols + j] = 0;
for (k = 0; k < m; k++) {
C[i * cols + j] += A[i * m + k] * B[k * cols + j];
}
}
}
}
void matrixAdd(int rows, int cols, float *A, float *B, float *C) {
/* C(rows*cols) = A(rows*cols) + B(rows*cols) */
int i;
for (i = 0U; i < rows * cols; i++) {
C[i] = A[i] + B[i];
}
}
void matrixTransposeMultiply(int rows, int m, int cols, float *A, float *B, float *C) {
/* C(rows*cols) = A(rows*m)*B(cols*m)T */
int i, j, k;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
C[i * cols + j] = 0;
for (k = 0; k < m; k++) {
C[i * cols + j] += A[i * m + k] * B[k + j * m];
}
}
}
}
void matrixSub(int rows, int cols, float *A, float *B, float *C) {
/* C(rows*cols) = A(rows*cols) - B(rows*cols) */
int i;
for (i = 0U; i < rows * cols; i++) {
C[i] = A[i] - B[i];
}
}
int main(){
int i;
float A[6] = {1,2,3,4,5,6};
float B[6] = {4,5,6,7,8,9};
float *C = (float *)malloc(6 * sizeof(float));
//将A看作2*3, B看作3*2
matrixMultiply(2, 3, 2, A, B, C); // C=A+B
printf("A*B:\n");
for(i = 0; i < 4; i++){
printf("%f\n", C[i]);
}
printf("\n");
//将A和B都看作2*3
matrixAdd(2, 3, A, B, C);
printf("A+B:\n");
for(i = 0; i < 6; i++){
printf("%f\n", C[i]);
}
printf("\n");
//将A和B都看作2*3
matrixSub(2, 3, A, B, C);
printf("A-B:\n");
for(i = 0; i < 6; i++){
printf("%f\n", C[i]);
}
printf("\n");
//将A和B都看作2*3
matrixTransposeMultiply(2, 3, 2, A, B, C);
printf("A*B':\n");
for(i = 0; i < 4; i++){
printf("%f\n", C[i]);
}
printf("\n");
free(C);
}
用C语言实现矩阵的加、减、乘、转置乘
最新推荐文章于 2022-05-01 11:49:09 发布