C 程序中的矩阵乘法和归一化
矩阵乘法
现在讨论矩阵乘法的过程。只有满足特定条件才能执行矩阵乘法。假设两个矩阵是 P 和 Q,它们的维度是 P (a x b) 和 Q (z x y),则只有当 b = x 时才能找到结果矩阵。那么结果矩阵 R 的顺序将是 (m x q)。
算法
matrixMultiply(P, Q): Assume dimension of P is (a x b), dimension of Q is (z x y) Begin if b is not same as z, then exit otherwise define R matrix as (a x y) for i in range 0 to a - 1, do for j in range 0 to y – 1, do for k in range 0 to z, do R[i, j] = R[i, j] + (P[i, k] * Q[k, j]) done done done End
矩阵归一化
Suppose we have a 2x3 matrix: 4 5 6 1 2 3 The normalized matrix would be: 4/sqrt(pow(5,2) + pow(6,2)) 5/sqrt(pow(5,2) + pow(6,2)) 6/sqrt(pow(5,2) + pow(6,2)) 1/sqrt(pow(2,2) + pow(3,2)) 2/sqrt(pow(2,2) + pow(3,2)) 3/sqrt(pow(2,2) + pow(3,2))
示例
#include <stdio.h>
#include <math.h>
int main() {
int row, col, row1, col1;
int assignMatrix[50][50], rowAdd[100] = {0};
long long int a, square[50] = {0};
double norm[50][50], k;
printf("Enter size of a matrix
");
scanf("%d %d", &row, &col);
printf("Enter matrix of size %dX%d
", row, col);
for ( row1 = 0; row1 < row; row1++) {
for (col1 = 0; col1 < col; col1++) {
scanf("%d", &assignMatrix[row1][col1]);
}
}
printf("
rows: %d cols: %d elements:
",row,col);
for( row1 = 0; row1 < row; row1++) {
for( col1 = 0; col1 < col; col1++) {
printf("%d ", assignMatrix[row1][col1]);
}
printf("
");
}
for (row1 = 0; row1 < row; row1++) {
for (col1 = 1; col1 < col; col1++) {
a = assignMatrix[r][c];
square[row1] += a * a;
}
printf("Sum of squares of row %d: %lld
",row1,square[row1]);
}
for ( row1 = 0; row1 < row; row1++ ) {
k = 1.0 / sqrt(square[row1]);
for( col1 = 0; col1 < col; col1++ ) {
norm[row1][col1] = k * assignMatrix[row1][col1] ;
}
}
printf("
Normalized Matrix:
");
for( row1 = 0; row1 < row; row1++) {
for( col1 = 0; col1 < col; col1++) {
printf("%.3lf ", norm[row1][col1]);
}
printf("
");
}
return 0;
}输出
Enter size of a matrix 2 3 Enter matrix of size 2X3 4 5 6 1 2 3 rows: 2 cols: 3 elements: 4 5 6 1 2 3 Sum of squares of row 0: 61 Sum of squares of row 1: 13 Normalized Matrix: 0.512 0.640 0.768 0.277 0.555 0.832 Process returned 0 (0x0) execution time : 12.446 s Press any key to continue.
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP