实现两个N*N矩阵的乘法,矩阵由一维数组表示
1. 简述
注意下标、参数传递。只要把二维中下标,转化为一维数组的下标即可。
2. 核心代码
二维的公式是:c[i][j] += a[i][k] * b[k][j], k=0,1,2,...,N-1
一维的公式: c[i*N+j] += a[i*N+k] * b[k*N+j], k=0,1,2,...,N-1
void MaxtrixMultiply(const T* a,const T* b, T* c, unsigned int N) {
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
int c_index = i*N+j;
int a_index = i*N+0;
int b_index = 0*N+j;
c[c_index] = 0;
for(int k=0; k<N; k++) {
c[c_index] += a[a_index]*b[b_index];
a_index += 1;
b_index += N;
} // for
} // for
} // for
} // MaxtrixMultiply
代码中,为了减少乘法次数,首先计算矩阵a,b,c的下标,然后在循环通过加法,更新a和b的下标。空间换时间,减少了计算下标所用的时间。
3. 备注
矩阵相乘是可以优化的,斯特拉森算法就可以把时间复杂度降低到n^(log7),不过原始算法是需要假设n是2的幂,而且实现中,需要分块,如果对一维数值进行分块的话,实现起来反而会增加时间和空间的负担。对于斯特拉森算法以后有机会再看了,今天就到这里。
4. 参考
矩阵相乘算法_C语言空间 http://blog.csdn.net/chief1985/article/details/2402553
实现两个N*N矩阵的乘法,矩阵由一维数组表示相关推荐
- 【算法分析与设计】矩阵链乘法最优顺序问题
矩阵链乘法 矩阵连乘,选择不同的乘法顺序,效率可能千差万别. 高效的实现算法应该用动态规划来设计,具体的讲解可以看这里. 编程实现 public class Main {private static ...
- C++ 两个矩阵的乘法
C++ 两个矩阵的乘法 #include<stdio.h> #include<windows.h> void Multi(int * left, int * right, in ...
- 6-2 编写Matrix类,使用二维数组实现矩阵,实现两个矩阵的乘法。 (30分) java pta
编写程序题, 根据要求编写一个Java类,补充到代码中. 定义Matrix(矩阵)类,使用二维数组实现矩阵,实现两个矩阵的乘法.要求如下: 4个变量:row(行数),column(列数), matri ...
- 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )
文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...
- python矩阵和向量乘法总结
向量之间的乘法 torch.dot 点乘,相同维度的两个向量对应元素相乘再相加 torch.mul 对应元素相乘,结果同a*b 例子如下: 矩阵与向量的乘法 要求:矩阵的列数=向量的维数 结果:矩阵乘 ...
- 矩阵分解 (乘法篇)
引自简书:https://www.jianshu.com/p/0741789ffd06 引言 前面我们在矩阵分解 (加法篇)里面分析的加法下的矩阵分解. 这里我们来看看乘法下矩阵分解的要点. 对角和三 ...
- 矩阵乘法——矩阵快速幂
矩阵乘法怎么乘 设让矩阵 aaa 乘矩阵 bbb 得到矩阵 ccc,那么 ccc 的第 iii 行第 jjj 个元素的值就等于 aaa 的第 iii 行与 bbb 的第 jjj 列上对应元素相乘的和. ...
- 03矩阵的乘法与逆矩阵
矩阵的乘法和逆矩阵 Multiplication & inverse matrices 两个矩阵间的乘法.逆矩阵存在的条件.求解逆矩阵的方法 矩阵乘法 我们通过四种方法讨论如何使矩阵 A ...
- python三维矩阵乘法_tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘
最近看论文时看到了一个让我费解的操作. 二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵. 即: (n * c1) x (m * c1 * c2) x (n * c2) 得 n * m 实现主 ...
- 如何理解矩阵的乘法?
如何理解矩阵的乘法? 转载:http://www.360doc.com/content/18/0208/09/15930282_728535573.shtml 2018-02-08 风九天88 阅 1 ...
最新文章
- GPT-2:OpenAI的NLP商业化野望
- morlet包络检波matlab,布里渊光纤传感系统中的信号处理的研究
- UITextField的总结
- 阿里巴巴400集python教程_阿里巴巴推荐的400集Python视频合集免费学起来,学完万物皆可爬...
- 用C语言实现三子棋游戏
- 阿里用户体验大师教你如何让产品更加触动人心
- rust(67)-rust元组与空元组
- Zookeeper实战之单机模式
- 深度学习项目-人群密度估计
- CSS3-多列布局-伸缩盒布局-伸缩项目
- pytorch中创建多个空的tensor、pycharm从自己写的.py中引用函数下面画红线等问题
- 数据分析: 线性回归分析之研究二手房价的影响因素,建立房价预测模型
- 销售计算机流程图,flowchart_请问在电脑WORD中怎样画流程图?
- 华为机试真题 Python 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
- 【工具】pip安装不在当前虚拟环境中
- css3 - 图标元素动画效果5 - 弹性动画效果
- 训练集、验证集和测试集这三个名词的区别
- 好用又免费的办公软件
- ubuntu 输入法、邮箱迁移、词典、CHM阅读器
- 案例分析 陆金所_平安陆金所--金融跨界,一“陆”有礼
热门文章
- linux 负载进程,Linux 中 D 状态的进程与平均负载
- python项目代做_ECS 170代做、代写Python、data代做、代做Python程序代写Web开发|代写Database...
- 电脑配置知识_电脑小知识:装机不求人!10 分钟电脑配置挑选速成攻略|硬盘|电脑|cpu|装机|固态硬盘|机械硬盘...
- Kotlin — 实现JavaEE 开发Web工程
- Kotlin基础学习第6章—高阶函数
- DRF基类APIView的子类GenericAPIView
- Appium——元素定位
- 6.字符串截取数据求平均分
- 寻访x86处理器“实模式”和“保护模式”的前世今生
- Oracle 客户端安装 + pl/sql工具安装配置