这很奇怪,我看到f更快,而g比你看到的慢。但是他们对我来说都是一样的。也许不同版本的MATLAB?

>> g = @() zeros(1000, 0) * zeros(0, 1000);

>> f = @() zeros(1000)

f =

@()zeros(1000)

>> timeit(f)

ans =

8.5019e-04

>> timeit(f)

ans =

8.4627e-04

>> timeit(g)

ans =

8.4627e-04

编辑可以添加1的f和g的结尾,并看看你得到什么时间。

编辑2013年1月6日7:42 EST

我正在使用一台机器远程,所以抱歉低质量的图形(不得不生成他们盲目的)。

机器配置:

i7 920. 2.653 GHz。 Linux。 12 GB RAM。 8MB缓存。

它看起来甚至我可以访问的机器显示这种行为,除了在更大的尺寸(1979年和2073之间的某个地方)。没有理由我现在可以想到的空矩阵乘法在更大的尺寸更快。

我会在回来之前多调查一下。

EDIT 2013年1月11日

在@ EitanT的帖子后,我想做一点点挖。我写了一些C代码,看看matlab可能如何创建一个零的矩阵。这里是我使用的c代码。

int main(int argc, char **argv)

{

for (int i = 1975; i <= 2100; i+=25) {

timer::start();

double *foo = (double *)malloc(i * i * sizeof(double));

for (int k = 0; k < i * i; k++) foo[k] = 0;

double mftime = timer::stop();

free(foo);

timer::start();

double *bar = (double *)malloc(i * i * sizeof(double));

memset(bar, 0, i * i * sizeof(double));

double mmtime = timer::stop();

free(bar);

timer::start();

double *baz = (double *)calloc(i * i, sizeof(double));

double catime = timer::stop();

free(baz);

printf("%d, %lf, %lf, %lf\n", i, mftime, mmtime, catime);

}

}

这里是结果。

$ ./test

1975, 0.013812, 0.013578, 0.003321

2000, 0.014144, 0.013879, 0.003408

2025, 0.014396, 0.014219, 0.003490

2050, 0.014732, 0.013784, 0.000043

2075, 0.015022, 0.014122, 0.000045

2100, 0.014606, 0.014480, 0.000045

正如你可以看到calloc(第4列)似乎是最快的方法。它也在2025年和2050年之间显着更快(我认为它将在2048左右?)。

现在我回到matlab检查相同。这里是结果。

>> test

1975, 0.003296, 0.003297

2000, 0.003377, 0.003385

2025, 0.003465, 0.003464

2050, 0.015987, 0.000019

2075, 0.016373, 0.000019

2100, 0.016762, 0.000020

看起来f()和g()都使用较小大小的calloc(<2048?)。但是在更大的大小f()(zeros(m,n))开始使用malloc memset,而g()(zeros(m,0)* zeros(0,n) 因此,通过以下解释分歧

> zeros(..)开始在较大的大小使用不同的(较慢?)方案。

> calloc也有些出乎意料地表现,导致性能的提高。

这是Linux上的行为。有人可以在不同的机器(也许不同的操作系统)上做同样的实验,看看实验是否成立?

matlab 空矩阵耗时,性能 – 更快的方式通过空矩阵乘法初始化数组? (Matlab)相关推荐

  1. php array 数组去重,更快的方式实现 PHP 数组去重

    如何学习PHP array_flip()定义和用法 array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失. 如果原数组中的值的数 ...

  2. php 数组去重函数,【译】更快的方式实现PHP数组去重

    概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组.这个函数大多数情况下都能工作得很好.但是,如果你尝试在一个大的数组里使用array_u ...

  3. 服务器webpack构建性能,[译] 优化 WEBPACK 以更快地构建 REACT

    如果您的 Webpack 构建缓慢且有大量的库 -- 别担心,有一种方法可以提高增量构建的速度!Webpack 的 DLLPlugin 允许您将所有的依赖项构建到一个文件中.这是一个取代分块的很好选择 ...

  4. 全新的Microsoft Office 2016发布,以更少步骤更快地执行工作

    微软在旧版Office基础上对软件做了升级,打造了全新的 Office 2016 办公软件,Office 2016新功能包括附带的Office移动应用程序,其中包括家庭版.个人版及专业版等多个Offi ...

  5. matlab 结构体 单元数组,matlab结构体、数组和单元数组类型的创建

    matlab结构体.数组和单元数组类型的创建 @ matlab结构体类型 通过字段赋值创建结构体 创建格式: 结构体名称.字段名称 样例: >> student.name='Alan'; ...

  6. A40i使用笔记:GPIO操作方式(用于测试设备io驱动性能)(传统方式、设备树方式、寄存器方式操作GPIO)

    一.前言 前文介绍了文件io的驱动方式,可以用于led点灯灭灯或者一些简单的不需求时序控制的ic操作,但是用于功能类ic,如AD采集芯片等时序控制需求高的,就不行了,这时候就需求高速io去实现指定的芯 ...

  7. 矩阵切换器有哪些控制方式,有什么好处

    矩阵切换器有哪些控制方式呢?矩阵切换器,可以使用网络控制,app控制,web等方式控制. 一.网络控制是指设备加一个网络模块使得在一个局域网内电脑进行控制. 二.app控制是指设备加一个app控制模块 ...

  8. matlab运行为什么要选中代码,性能 – 为什么(在MATLAB中)这个代码更快?

    我在MATLAB中用两种不同的方式编写了一些代码.首先,我使用了两个for循环,乍一看似乎很愚蠢: Initial = [zeros(10,1) ones(10,1)]; for xpop=1:10 ...

  9. matlab中的expotest,提高Fortran矩阵指数性能(Expokit比Matlab、Python慢)

    我正在进行一个模拟,其中的瓶颈是执行大量复杂的双精度矩阵指数运算,我发现Fortran(Expokit)对于小矩阵很好,但对于较大的矩阵,它的性能比Matlab或Python差.在 我在下面包含了一个 ...

最新文章

  1. delphi ScriptGate 调用JS
  2. 看了这7篇论文,你会完全掌握卷积神经网络!
  3. webpack为什么加载不了css?
  4. STM32 USART串口DMA 接收和发送的源码详解!
  5. js笔记(10)之无缝滚动
  6. 【CSON原创】HTML5字体动态粒子效果发布
  7. 七乐彩中奖规则表_【开奖】双色球第2020094期开奖结果出炉!你中奖了吗?
  8. vue 同级页面调用方法_【Vue】一个vue页面调用另一个vue页面中的方法
  9. sql行转列 列数据不定 sql交叉报表实例
  10. 1.10_merge_sort_归并排序
  11. mysql主从复制及读写分离
  12. 在vue中安装axios库
  13. java 视频截图_Java Web 中使用ffmpeg实现视频转码、视频截图
  14. android内核编译 me525,今天给ME525+刷了Android 4.0系统,很流畅!
  15. python爬取网易云评论最多的歌_python爬取网易云音乐评论
  16. mysql设置值班表_简单的员工轮换值班表
  17. 网上购车平台买车,购车门槛低!
  18. 爬取迷你mp4各个电影信息
  19. SD-RTN——毫秒级网络加速带来全新的体验
  20. EasyClick脚本开发教程(7)抖音评论区指定概率随机点赞

热门文章

  1. element手机验证格式_Laravel 自定义封装表单验证类
  2. mysql查询去年本月的数据_MySQL查询本周、上周、本月、上个月份数据的sql代码...
  3. arcgis加载dwg显示一个点_Arcgis添加控制点配准校正影像,更新校正之后,其他软件打开之后,影像位置没有校正解决办法...
  4. mysql maxpreparedstmtcount_NodeJs Mysql Cant't create more than max_prepared_stmt_count statements
  5. 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
  6. 前端性能优化篇——浏览器同域名并发请求对限制
  7. Java @SuppressWarnings注解
  8. Python数模笔记-模拟退火算法(2)约束条件的处理
  9. python mysql in 参数_python mysql中in参数化说明
  10. [java基础问题] Exception 和 Error