
矩阵乘法
现在讨论矩阵乘法的过程。矩阵乘法只有满足一定的条件才能进行。假设两个矩阵是 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;
}
输出
请您注册登录超级码客,加载全部码客文章内容... |