首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >3×3和N×N方阵的乘法

3×3和N×N方阵的乘法
EN

Code Review用户
提问于 2019-01-17 02:08:56
回答 1查看 567关注 0票数 0

我最近用C++编写了一个矩阵模块。

在开发过程中,我引用了一些源代码,发现了一个问题。

例如,矩阵乘法:

这种方法适用于所有N×N矩阵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void multiplyMatrix(const float32* a, const float32* b, float32* dst,
                    int32 aColumns, int32 bColumns, int32 dstColumns, int32 dstRows) {

    for (int32 i = 0; i < dstRows; i++) {

        for (int32 j = 0; j < dstColumns; j++) 
            dst[i * dstColumns + j] = dotMatrix(a, b, aColumns, bColumns, j, i);

    }
}

float32 dotMatrix(const float32* a, const float32* b, 
                         int32 aColumns, int32 bColumns, 
                         int32 column, int32 row) {

    float32 result = 0.0f;

    int32 index = aColumns * row;
    for (int32 i = 0; i < aColumns; i++) {
        result += a[index++] * b[column];
        column += bColumns;
    }

    return result;
}

接下来,我编写了一个3x3矩阵类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Matrix3x3
{
public:
float32 m11, m12, m13, 
        m21, m22, m23, 
        m31, m32, m33;

float32 element[9];

void multiply(float32 ma11, float32 ma12, float32 ma13,
              float32 ma21, float32 ma22, float32 ma23,
              float32 ma31, float32 ma32, float32 ma33) {

    float32 temp1 = m11 * ma11 + m21 * ma12 + m31 * ma13;
    float32 temp2 = m12 * ma11 + m22 * ma12 + m32 * ma13;

    m13 = m13 * ma11 + m23 * ma12 + m33 * ma13;
    m11 = temp1;
    m12 = temp2;

    temp1 = m11 * ma21 + m21 * ma22 + m31 * ma23;
    temp2 = m12 * ma21 + m22 * ma22 + m32 * ma23;
    m23   = m13 * ma21 + m23 * ma22 + m33 * ma23;
    m21   = temp1;
    m22   = temp2;

    temp1 = m11 * ma31 + m21 * ma32 + m31 * ma33;
    temp2 = m12 * ma31 + m22 * ma32 + m32 * ma33;
    m31   = m13 * ma31 + m23 * ma32 + m33 * ma33;
    m32   = temp1;
    m33   = temp2;
}
}

显然,第一个很方便。

接下来,我测试了计算所需的时间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        float32 e1[9];
        e1[0] = 2.1018f;   e1[1] = -1.81754f; e1[2] = 1.2541f;
        e1[3] = 0.54194f;  e1[4] = 2.75391f;  e1[5] = -0.1167f;
        e1[6] = -5.81652f; e1[7] = -7.9381f;  e1[8] = 4.2816f;

        float32 e2[9];
        e2[0] = 2.1018f;   e2[1] = -1.81754f; e2[2] = 1.2541f;
        e2[3] = 0.54194f;  e2[4] = 2.75391f;  e2[5] = -0.1167f;
        e2[6] = -5.81652f; e2[7] = -7.9381f;  e2[8] = 4.2816f;

        Matrix3x3 a;
        a.m11 = 2.1018f;   a.m12 = -1.81754f; a.m13 = 1.2541f; 
        a.m21 = 0.54194f;  a.m22 = 2.75391f;  a.m23 = -0.1167f;
        a.m31 = -5.81652f; a.m32 = -7.9381f;  a.m33 = 4.2816f;

        Matrix3x3 b = a;

        float64 timeSpent = 0;
        LARGE_INTEGER nFreq;
        LARGE_INTEGER nBeginTime;
        LARGE_INTEGER nEndTime;

        QueryPerformanceFrequency(&nFreq); // statistical frequency
        QueryPerformanceCounter(&nBeginTime);// start timer

        for (int32 i = 0; i < 100000; i++) {
            multiplyMatrix(e1, e2, dst, 3, 3, 3, 3);
        }

    QueryPerformanceCounter(&nEndTime); //end timer
            timeSpent = (float64)(nEndTime.QuadPart - nBeginTime.QuadPart) / (nFreq.QuadPart);

   printf("timeSpent1:%f\n", timeSpent);

   QueryPerformanceCounter(&nBeginTime);
   for (int32 i = 0; i < 100000; i++) {
            b.multiply(a.m11, a.m12, a.m13, 
                       a.m21, a.m22, a.m23, 
                       a.m31, a.m32, a.m33);
        }
   QueryPerformanceCounter(&nEndTime);
        timeSpent = (float64)(nEndTime.QuadPart - nBeginTime.QuadPart) / (nFreq.QuadPart);

printf("timeSpent2:%f\n", timeSpent);

产出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timeSpent1:0.014277
timeSpent2:0.004649
timeSpent1:0.012684
timeSpent2:0.004522
.......
.......
timeSpent1:0.003414
timeSpent2:0.001166
timeSpent1:0.003407
timeSpent2:0.001242

这种效率的差异是显著的还是可以忽略不计的?

EN

回答 1

Code Review用户

发布于 2019-01-17 04:02:52

3x3的因子4是相同的顺序,好的。

可以编写生成Matrix99x99 C++文件,并对其进行测试。我猜这也是第四因子。如果是2,那么就完全没问题了。

带A维数LxM和B维数MxN的正规矩阵乘法A.B,要求S‘hared M,从而得到维数LxN。因此,这样一个小的C++类就是nice._

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/211673

复制
相关文章
Hadoop没有消亡,它是大数据的未来
有人认为 Hadoop 正在失败,但硅谷数据管理公司 Hortonworks 的总经理 Vamsi K. Chemitiganti 并不这么看,为了反驳此前一篇文章《为什么 Hadoop 正在消亡?(Why Hadoop is Failing)》的观点,他在自己的博客上写了一篇论述自己看法的文章,他认为达尔文式的开源生态系统正在确保 Hadoop 成为稳固和成熟的技术平台。机器之心对这篇反驳文章进行了编译介绍,但本文内容并不代表机器之心的观点。
IT阅读排行榜
2018/08/16
2550
观点 | Hadoop没有消亡,它是大数据的未来
选自KDnuggets 作者:Vamsi K. Chemitiganti 机器之心编译 参与:微胖、李泽南、吴攀 有人认为 Hadoop 正在失败,但硅谷数据管理公司 Hortonworks 的总经理 Vamsi K. Chemitiganti 并不这么看,为了反驳此前一篇文章《为什么 Hadoop 正在消亡?(Why Hadoop is Failing)》的观点,他在自己的博客上写了一篇论述自己看法的文章,他认为达尔文式的开源生态系统正在确保 Hadoop 成为稳固和成熟的技术平台。机器之心对这篇反驳文章
机器之心
2018/05/07
5340
maven: 打包可运行的jar包(java application)及依赖项处理
IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: 1 <plugin> 2 <groupId>org.codehaus.mojo</groupId> 3 <artifactId>exec-maven-plugin</artifactId> 4 <version>1.2.1</version> 5 <executions> 6 <execution> 7 <
菩提树下的杨过
2018/01/19
2.1K0
Vue CLI 的依赖项被投毒!
vue-cli 的依赖项 node-ipc 包正在以反战为名进行供应链投毒,该包在 npm 每周有上百万下载量。
@超人
2022/04/14
1.2K0
Vue CLI 的依赖项被投毒!
清理无用的依赖包
随着开发的不断推进,难免会产生一些以前引入了但现在已经不再需要的依赖包,置之不理显然并不是一个好习惯。
凌虚
2020/07/17
4.3K0
maven 解包依赖项中的文件
使用goal:unpack-dependencies 在配置参数includeArtifactIds中指定要解包的模块制件ID
路过君
2022/07/20
2.4K0
cronie所依赖的包
CentOS6.3 x86_64 最小化安装版安装cronie yum -y install cronie 通过这个命令可得出安装cronie所得依赖包如下
三杯水Plus
2018/11/14
9580
140亿岁的宇宙,多少文明存在又消亡过,为何没有文明通过虫洞找到我们?
可观测宇宙的直径大约有900亿光年。至少有1000亿个星系,每个星系拥有大概1000亿到10000亿颗恒星。
钱塘数据
2018/07/30
6020
140亿岁的宇宙,多少文明存在又消亡过,为何没有文明通过虫洞找到我们?
Spring IoC依赖查找:依赖注入还不够吗?依赖查找存在的价值?
我们都知道IoC的实现大致分为两种主要实现,依赖查找和依赖注入,我们都知道Spring IoC 依赖查找可以通过名称或者ID查找,那么名称和ID在一个上下文里面必须是唯一的,那么这里涉及到一个问题-Spring应用里面是不是可以拥有多个上下文「答案是肯定的」后续会详细说明
码农架构
2020/10/26
9280
Spring IoC依赖查找:依赖注入还不够吗?依赖查找存在的价值?
fastapi 路径依赖项Depends / 装饰器依赖dependencies / 全局依赖 / 带 yield 的依赖
learn from https://fastapi.tiangolo.com/zh/tutorial/dependencies/
Michael阿明
2022/01/07
2.9K0
fastapi 路径依赖项Depends / 装饰器依赖dependencies / 全局依赖 / 带 yield 的依赖
MapReduce程序依赖的jar包[通俗易懂]
难得想写个mapreduce程序。发现已经不记得须要加入那些jar包了,网上找了一会也没发现准确的答案。幸好对hadoop体系结构略知一二。迅速试出了写mapreduce程序须要的五个jar包。
全栈程序员站长
2022/07/08
1.3K0
MapReduce程序依赖的jar包[通俗易懂]
ts 导 js 的依赖包
说明,由于vscode在ts状态下没有自动导入js 的功能,特此写此篇文章来说明手动导包的方法 由于过于简单,即参考阿里大于老版本api导入的方法: ...... import SMSClient = require('@alicloud/sms-sdk'); ...... export class SmsService { sendSms() { const sms: SmsReq = { phone: '12345678901', key: this.app.
stormKid
2019/03/05
2.9K0
bootoption没有启动项_javacontinue的用法
1 fetch(‘http://127.0.0.1:8000/api/login’, {2 method: “POST”,3 headers: ({4 ‘Content-Type’: ‘application/x-www-form-urlencoded’
全栈程序员站长
2022/11/17
3560
Visual Studio2010中的外部依赖项
Visual Studio2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件。比如,main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头文件,而这些头文件又可能还包含另外的头文件,所有这些都显示在外部依赖项里面。于是有的时候外部依赖性就变得很庞大。 若想减少外部依赖项,那就尽量避免包含不必要的头文件。 不过根据编译器的行为,可能编译时应该会过滤掉那些虽然包含进来,但完全没有用到的头文件。完全可以不必理会外部依赖项。
AIHGF
2019/02/18
2.7K0
区块链:它是什么,它是如何工作的
编者按:本报告是由《威胁镜头》,Stratfor的独特保护情报产品制作的。以企业安全领导者的头脑设计,威胁镜头使行业专业人士能够预测、识别、衡量和减轻世界各地的人们和资产面临的威胁。
架构师研究会
2018/07/25
6260
区块链:它是什么,它是如何工作的
[译] 如何更新 package.json 中的依赖项
原文:https://medium.com/better-programming/how-to-upgrade-dependencies-in-package-json-e5546804187f
江米小枣
2020/06/15
5.2K0
apt一键下载所有依赖的包_apt自动安装依赖包
这几天从书本上见识到了 aptitude 包管理工具的魅力,果断想在自己的 Ubuntu Kylin 16.10 上玩一玩。
全栈程序员站长
2022/11/17
2.6K0
[Go] go mod下载的依赖包位置
默认情况下,开启go mod , 使用root用户进行了拉取包的操作 centos下实测下载的包位置在 /root/go/pkg/mod/ 也就是$HOME/go/pkg/mod
唯一Chat
2021/03/05
2.3K0
[Go] go mod下载的依赖包位置
Python 包的依赖管理,有解了!
来源:https://blog.mythsman.com/post/6088206570684f526e6bc606/ 推荐阅读:终于来了,【第二期】 彭涛Python 爬虫特训营!! 之前一直比较抵触用 Python ,很大一部分原因是觉得 Python 项目的环境管理比较混乱。Node.js 有 Npm 包管理工具,通过 package.json 配置项目依赖,最多再通过 nvm 来进行环境切换;Java 有 Maven Gradle 来进行包管理和项目依赖配置,并体现在 pom.xml 和 build
sergiojune
2022/10/08
2.9K0
Python 包的依赖管理,有解了!
pip安装、卸载依赖包的命令
1.【下载】 python -m pip install –upgrade pip
全栈程序员站长
2022/11/03
2.6K0

相似问题

pkgDep找不到我的包的依赖项

15

无法从python包加载模块,尽管它是存在的

24

Python:显示未满足的依赖项错误和损坏的包错误,尽管没有这样的包

12

匕首没有看到我自己生成的依赖项

10

Gradle没有找到我的在线依赖项。

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文