- 浏览: 694842 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
在微博中看到有人分享了篇文章“为什么转置512×512矩阵,会比513×513矩阵慢很多?”http://note.sdo.com/u/1557869253/n/sSPb5~k5HYUMLX0mU000QX
没仔细看原理,但与缓存的命中率有关。
今天写矩阵翻转的代码,突然想到这个问题。测了一下速度:
结论:新建一片内存,顺序访问其中的元素,速度比较快!!!在翻转中能快个两倍左右!!!(注:我的矩阵是行优先存储的)
有关代码如下(代码不完全):
测试用的代码如下(代码不完全):
测试用结果如下:
没仔细看原理,但与缓存的命中率有关。
今天写矩阵翻转的代码,突然想到这个问题。测了一下速度:
结论:新建一片内存,顺序访问其中的元素,速度比较快!!!在翻转中能快个两倍左右!!!(注:我的矩阵是行优先存储的)
有关代码如下(代码不完全):
//水平翻转矩阵中的元素 void flipHorizontally(){ T tmp; //int halfHeight=height_row/2; int halfWidth=width_col/2; for (int r=0; r<height_row; r++) { for (int c=0; c<halfWidth; c++) { int c2=width_col-1-c; tmp=getValue(r,c); this->operator()(r,c)=this->operator()(r,c2); this->operator()(r,c2)=tmp; } } } //水平翻转矩阵中的元素 Matrix flipHorizontallyNewMatrix(){ Matrix flipped(height_row,width_col); int halfWidth=width_col/2; for (int r=0; r<height_row; r++) { for (int c=0; c<=halfWidth; c++) { int c2=width_col-1-c; flipped(r,c)=this->operator()(r,c2); flipped(r,c2)=this->operator()(r,c); } } return flipped; } //水平翻转矩阵中的元素 Matrix flipHorizontallyNewMatrix2(){ Matrix flipped(height_row,width_col); for (int r=0; r<height_row; r++) { for (int c=0; c<width_col; c++) { int c2=width_col-1-c; flipped(r,c)=this->operator()(r,c2); } } return flipped; } //垂直翻转矩阵中的元素 Matrix flipVerticallyNewMatrix(){ Matrix flipped(height_row,width_col); int halfHeight=height_row/2; for (int r=0; r<=halfHeight; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; flipped(r,c)=this->operator()(r2,c); flipped(r2,c)=this->operator()(r,c); } } return flipped; } //垂直翻转矩阵中的元素 Matrix flipVerticallyNewMatrix2(){ Matrix flipped(height_row,width_col); for (int r=0; r<height_row; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; flipped(r,c)=this->operator()(r2,c); //flipped(r2,c)=this->operator()(r,c); } } return flipped; } //垂直翻转矩阵中的元素 void flipVertically(){ T tmp; int halfHeight=height_row/2; for (int r=0; r<halfHeight; r++) { for (int c=0; c<width_col; c++) { int r2=height_row-1-r; tmp=getValue(r,c); this->operator()(r,c)=this->operator()(r2,c); this->operator()(r2,c)=tmp; } } }
测试用的代码如下(代码不完全):
for (int n=10; n<1000; n+=33) { MatrixInt m(n,n); for (int i=0; i<m.getNumEl(); i++) { m(i)=i; } int testNum=10000/n*10000/n; Timer timer; for(int i=0; i<testNum; i++) m.flipVerticallyNewMatrix(); long tv1=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipVerticallyNewMatrix2(); long tv2=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipVertically(); long tvInplace=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontallyNewMatrix(); long th1=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontallyNewMatrix2(); long th2=timer.getElapsedTimeAndRestart(); for(int i=0; i<testNum; i++) m.flipHorizontally(); long thInplace=timer.getElapsedTimeAndRestart(); cout<<"矩阵大小: "<<m.height_row<<"行*"<<m.width_col<<"列"<<endl; cout<<"水平翻转耗时:方法1: "<<th1<<";\t\t方法2: "<<th2<<";\t\t原位翻转: "<<thInplace<<endl; cout<<"垂直翻转耗时:方法1: "<<tv1<<";\t\t方法2: "<<tv2<<";\t\t原位翻转: "<<tvInplace<<endl; cout<<endl; }
测试用结果如下:
矩阵大小: 10行*10列 水平翻转耗时:方法1: 566; 方法2: 340; 原位翻转: 410 垂直翻转耗时:方法1: 652; 方法2: 342; 原位翻转: 450 矩阵大小: 43行*43列 水平翻转耗时:方法1: 364; 方法2: 180; 原位翻转: 390 垂直翻转耗时:方法1: 425; 方法2: 178; 原位翻转: 434 矩阵大小: 76行*76列 水平翻转耗时:方法1: 361; 方法2: 188; 原位翻转: 402 垂直翻转耗时:方法1: 433; 方法2: 183; 原位翻转: 445 矩阵大小: 109行*109列 水平翻转耗时:方法1: 360; 方法2: 180; 原位翻转: 397 垂直翻转耗时:方法1: 411; 方法2: 174; 原位翻转: 440 矩阵大小: 142行*142列 水平翻转耗时:方法1: 357; 方法2: 176; 原位翻转: 406 垂直翻转耗时:方法1: 413; 方法2: 173; 原位翻转: 456 矩阵大小: 175行*175列 水平翻转耗时:方法1: 353; 方法2: 173; 原位翻转: 403 垂直翻转耗时:方法1: 412; 方法2: 171; 原位翻转: 452 矩阵大小: 208行*208列 水平翻转耗时:方法1: 359; 方法2: 176; 原位翻转: 408 垂直翻转耗时:方法1: 417; 方法2: 173; 原位翻转: 455 矩阵大小: 241行*241列 水平翻转耗时:方法1: 349; 方法2: 171; 原位翻转: 400 垂直翻转耗时:方法1: 411; 方法2: 170; 原位翻转: 449 矩阵大小: 274行*274列 水平翻转耗时:方法1: 346; 方法2: 173; 原位翻转: 400 垂直翻转耗时:方法1: 406; 方法2: 167; 原位翻转: 448 矩阵大小: 307行*307列 水平翻转耗时:方法1: 343; 方法2: 170; 原位翻转: 400 垂直翻转耗时:方法1: 402; 方法2: 168; 原位翻转: 443 矩阵大小: 340行*340列 水平翻转耗时:方法1: 360; 方法2: 174; 原位翻转: 420 垂直翻转耗时:方法1: 410; 方法2: 169; 原位翻转: 447 矩阵大小: 373行*373列 水平翻转耗时:方法1: 460; 方法2: 259; 原位翻转: 398 垂直翻转耗时:方法1: 512; 方法2: 261; 原位翻转: 443 矩阵大小: 406行*406列 水平翻转耗时:方法1: 456; 方法2: 262; 原位翻转: 403 垂直翻转耗时:方法1: 516; 方法2: 255; 原位翻转: 452 矩阵大小: 439行*439列 水平翻转耗时:方法1: 450; 方法2: 248; 原位翻转: 401 垂直翻转耗时:方法1: 500; 方法2: 249; 原位翻转: 445 矩阵大小: 472行*472列 水平翻转耗时:方法1: 453; 方法2: 269; 原位翻转: 402 垂直翻转耗时:方法1: 513; 方法2: 265; 原位翻转: 450 矩阵大小: 505行*505列 水平翻转耗时:方法1: 433; 方法2: 252; 原位翻转: 390 垂直翻转耗时:方法1: 489; 方法2: 249; 原位翻转: 436 矩阵大小: 538行*538列 水平翻转耗时:方法1: 440; 方法2: 247; 原位翻转: 398 垂直翻转耗时:方法1: 497; 方法2: 247; 原位翻转: 444 矩阵大小: 571行*571列 水平翻转耗时:方法1: 443; 方法2: 256; 原位翻转: 397 垂直翻转耗时:方法1: 496; 方法2: 248; 原位翻转: 440 矩阵大小: 604行*604列 水平翻转耗时:方法1: 439; 方法2: 252; 原位翻转: 402 垂直翻转耗时:方法1: 494; 方法2: 248; 原位翻转: 438 矩阵大小: 637行*637列 水平翻转耗时:方法1: 436; 方法2: 244; 原位翻转: 397 垂直翻转耗时:方法1: 488; 方法2: 242; 原位翻转: 432 矩阵大小: 670行*670列 水平翻转耗时:方法1: 427; 方法2: 243; 原位翻转: 384 垂直翻转耗时:方法1: 483; 方法2: 238; 原位翻转: 427 矩阵大小: 703行*703列 水平翻转耗时:方法1: 449; 方法2: 257; 原位翻转: 403 垂直翻转耗时:方法1: 527; 方法2: 260; 原位翻转: 459 矩阵大小: 736行*736列 水平翻转耗时:方法1: 432; 方法2: 246; 原位翻转: 395 垂直翻转耗时:方法1: 493; 方法2: 245; 原位翻转: 440 矩阵大小: 769行*769列 水平翻转耗时:方法1: 452; 方法2: 258; 原位翻转: 409 垂直翻转耗时:方法1: 518; 方法2: 256; 原位翻转: 458 矩阵大小: 802行*802列 水平翻转耗时:方法1: 434; 方法2: 248; 原位翻转: 392 垂直翻转耗时:方法1: 492; 方法2: 248; 原位翻转: 433 矩阵大小: 835行*835列 水平翻转耗时:方法1: 415; 方法2: 240; 原位翻转: 372 垂直翻转耗时:方法1: 466; 方法2: 234; 原位翻转: 416 矩阵大小: 868行*868列 水平翻转耗时:方法1: 427; 方法2: 247; 原位翻转: 388 垂直翻转耗时:方法1: 478; 方法2: 239; 原位翻转: 433 矩阵大小: 901行*901列 水平翻转耗时:方法1: 448; 方法2: 262; 原位翻转: 400 垂直翻转耗时:方法1: 499; 方法2: 251; 原位翻转: 449 矩阵大小: 934行*934列 水平翻转耗时:方法1: 422; 方法2: 248; 原位翻转: 380 垂直翻转耗时:方法1: 477; 方法2: 237; 原位翻转: 426 矩阵大小: 967行*967列 水平翻转耗时:方法1: 436; 方法2: 257; 原位翻转: 388 垂直翻转耗时:方法1: 493; 方法2: 248; 原位翻转: 438
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 829在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21861、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1875解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5487boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 19921、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11767主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8600上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17619MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 60721、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19681、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3382初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2323现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3766调用CUDA的核函数时指定block 和 thread大小,该 ... -
创建及使用DLL
2014-09-29 15:22 1240此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2169在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 18731、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 2020调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ...
相关推荐
1.二维动态数组,编程实现N*N矩阵乘法,我用的随机数赋值,为的是测速方便,你也可以稍微改改手动赋值。 2.测试6种循环嵌套方式:yix,iyx,yxi,xyi,xiy,ixy.体现“运算时间vs矩阵阶数N”的变化趋势
### 多普勒测速雷达测速误差分析 #### 一、引言 随着科技的发展,雷达测速技术已经成为一种重要的速度测量手段。多普勒测速雷达利用多普勒效应来测量目标的运动速度,具有高精度和实时性等特点。然而,在实际应用...
eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速工具eNetTest 网管内网单机测速...
MATLAB(矩阵实验室)是一种强大的编程环境,广泛应用于信号处理、图像分析和数值计算等领域,非常适合进行雷达系统的研究与开发。 脉冲雷达工作原理: 脉冲雷达系统通过发射一系列短暂的电磁脉冲,这些脉冲在空间...
本文将深入探讨“电脑CPU测速工具”及其核心功能,特别是在多线程环境下的性能测试。 标题提到的“电脑CPU测速工具”是一种专门用于测量处理器性能的软件应用。这类工具的主要任务是通过执行特定的计算任务来衡量...
一个关于雷达测速的MATLAB仿真程序,FIR带通滤波器matlab 测速仪。
自行车测速仿真是一个在电子工程和计算机科学领域常见的实践项目,主要目的是通过模拟实际环境来测试和验证自行车的速度测量系统。在这个项目中,我们利用了Protues软件,这是一个强大的虚拟原型设计工具,广泛用于...
本文将深入探讨霍尔测速技术及其在“mealsk8”项目中的应用,同时会涉及到与单片机通信的相关程序设计。 首先,霍尔效应是一种物理现象,由美国物理学家埃德温·霍尔在1879年发现。当电流通过导体,并在垂直于电流...
【Android网络测速App源代码】是一个专门为Android平台设计的应用程序,用于测试设备的网络速度,包括上传和下载的速度。这个App不仅提供了基本的测速功能,还具有记录查询和结果保存到TXT文件的能力,同时结合了...
雷达测速抓拍软件在交通安全领域扮演着至关重要的角色,主要应用于卡口检测和路口测速,以确保交通法规的执行和道路安全。本软件专为HT3000D高清测速仪设计,能够与海康等品牌的测试相机协同工作,提供精确的测速...
局域网测速是网络管理中的一个重要环节,它涉及到如何评估和优化本地网络的性能。在局域网中,高效的数据传输速度对于共享文件、在线游戏、视频会议等活动至关重要。以下是一些关于局域网测速及其相关软件的详细知识...
【360测速单文件版】是一款专为网络速度测试设计的小巧工具,它集成了360安全公司的技术,旨在帮助用户快速、准确地了解自己的网络状况。这款软件的特点在于其轻量级的特性,仅包含少数几个文件,方便用户下载和使用...
【pd_radar_雷达代码_雷达测速_pd雷达测速_pd测速】 雷达技术是现代电子信息技术中的重要组成部分,广泛应用于军事、交通、气象等多个领域。在这个项目中,我们主要关注的是pd雷达(Pulse Doppler Radar)的测速...
红外测速技术是一种广泛应用在各种领域中的速度检测方法,它主要依赖于红外光的发射与接收来计算物体的运动速度。这项技术广泛应用于交通监控、工业自动化、体育竞赛计时等多个场景。本压缩包文件“红外测速.zip”...
《天翼测速专家装维人员使用手册和问题指南》是为网络速率测试提供的一份详细操作手册,主要适用于中国电信的装维人员,包括使用手机、PDA以及智能网关等设备进行测速的场景。这份手册旨在确保装维人员能够高效、...
在单片机应用领域,小车测速是一个常见的任务,尤其在智能小车或自动机器人设计中至关重要。本文将深入探讨如何使用单片机实现小车测速,并结合描述中的"新款光电测速传感器配套资料",来解析相关技术细节。 首先,...
标题“电机测速并显示”涉及的是电机控制领域的一个关键技术——速度测量和实时数据显示。在电机控制系统中,准确地获取电机的转速是至关重要的,因为它直接影响到系统的精度、稳定性和效率。以下是对这个主题的详细...
CW雷达测速是一种常见的雷达应用技术,主要用于测定目标的移动速度。在本项目中,它通过MATLAB编程语言实现,提供了简洁而实用的解决方案。MATLAB是MathWorks公司开发的一款强大的数学计算和数据分析软件,其丰富的...
电机测速是电机控制系统中的一个重要环节,其目的是实时准确地检测电机的运行速度,以便控制电机达到预期的运行状态。电机测速算法主要包括测频法(M法)、测周法(T法)和M/T法。接下来详细解释这三种算法的原理和...