网站首页 > 技术文章 正文
数据在内存中线性顺序按字节编址存储,不管几维数组,其实质都是一维,关键在于数组名(相当于一个常量指针)是首地址,由下标求出偏移量。但C是强类型语言,有类型匹配的问题。
以下用两个方法求矩阵乘积,从具体到一般:
#include <stdio.h> // 二维数组做函数参数求矩阵乘积
// 矩阵(m*t) * 矩阵(t*n) = 矩阵(m*n)
void mutul(int a[][4],int b[][3], int c[][3],int m, int t, int n)
{
int i,j,k;
for(i=0; i<m; i++) // 控制a、c 行
for(j=0; j<n; j++) // 控制b、c 列
{
c[i][j]=0;
for(k=0; k<t; k++) // 控制b 行、a 列
c[i][j] += a[i][k]*b[k][j];
}
for(i=0; i<m; i++) // 输出
{
for(j=0; j<n; j++)
printf("%5d",c[i][j]);
printf("\n");
}
printf("\n");
}
void mutul2(int a[],int b[], int c[], int m,int t,int n)//降维处理
{
int i,j,s;
for(i=0; i<m; i++) // 控制a、c 行
for(j=0; j<n; j++) // 控制b、c 列
{
s=i*n+j;
c[s]=0;
for(int k=0; k<t; k++) // 控制b 行、a 列
c[s] += a[i*t+k] * b[k*n+j];
}
for(i=0;i<m; i++) // 输出
{
for(j=0; j<n; j++)
printf("%5d",c[i*n+j]);
printf("\n");
}
}
int main()
{
int a[2][4] = { 1, 2, 3, 4,
5, 6, 7, 8 };
int b[4][3] = { 1, 2, 3,
4, 5, 6,
7, 8, 9,
10,11,12 };
int c[2][3] = {0};
mutul(a,b,c,2,4,3);
mutul2((int*)a,(int*)b,(int*)c,2,4,3);
getchar();
return 0;
}
/*
70 80 90
158 184 210
70 80 90
158 184 210
*/
-End-
- 上一篇: sum() 函数性能堪忧,列表降维有何良方?
- 下一篇: 经典动态规划题——打家劫舍 打家劫舍猜一肖
猜你喜欢
- 2024-10-12 Excel查找重复次数最多的项目 excell查找重复数据
- 2024-10-12 经典动态规划题——打家劫舍 打家劫舍猜一肖
- 2024-10-12 函数公式的左膀右臂:ROW、COLUMN函数知多少
- 2024-10-12 sum() 函数性能堪忧,列表降维有何良方?
- 2024-10-12 【译】Vue 何以对 React“降维打击”?
- 2024-10-12 奇异值分解与主成分分析,一文带你理解Spark分布式降维方法
- 2024-10-12 收下这波 JS 技巧,从此少加班 js怎么做加法
- 2024-10-12 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法
- 2024-10-12 盘ES6、ES7、ES8、ES9、ES10 es6解构赋值
- 2024-10-12 Diff应用:从LCS到UICollectionView
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)