博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab 向量法建数组(推荐)
阅读量:5135 次
发布时间:2019-06-13

本文共 2246 字,大约阅读时间需要 7 分钟。

一、用赋值的方法可以扩展一个已知的数组:

arr= 1:1:4;

arr(8)=6;

此时,arr = 1 2 3 4 0 0 0 6

arrNew=arr;

此时arrNew = 1 2 3 4 0 0 0 6。

由上面可以看出,每一次扩展数组,都要经过以下

步骤:第一步,创建一个新数组。第二步,把旧数组的元素复制到新数组当中。第三步,把
扩展的元素写入新数组。第四步,删除旧数组。对于大数组来说这些步骤是相当耗时的。

二、用向量法

好的编程习惯

在循环执行开始之前 ,总是要预先分配一个数组,这样能大大增加循环运行的速度。

所以

用向量语句它的执行速度非常快。
向量算法的缺点是需要很大的内存, 因为一些间接的数组需要创建。 这就是向量算法的一个小缺点,但它的执行速度比 for 循环算法快得多。
在 MATLAB 中, 用向量算法代替循环的算法的过程称之为向量化(vectorization)。 向量化能够改进许多的 MATLAB 程序。

比较向量算法和循环

为了比较循环和向量算法执行所用的时间,用两种方法编程并测试三个运算所花的时
间。
1.用 for 循环计算 1 到 10000 的之间每一个整数的平方,而事先不初始化平方数组。
2.用 for 循环计算 1 到 10000 的之间每一个整数的平方,而事先初始化平方数组。
3.用向量算法计算 1 到 10000 的之间每一个整数的平方。
答案:
这个程序必须用上面提供的三种方式计算出 1 到 10000 之间的每一个整数的平方, 并测
试每一个种算法的时间。测试时间要用到 MATLAB 函数 tic 和 toc。tic 函数复位内建计时器,
而 toc 函数则从最后一次调用 tic 以秒开始计时。
因为在许多的计算机中它的时间钟是相当粗略的, 所以有必要多运行几次以获得相应的
平均数。

% 脚本文件 times.m%% 目标:% 该程序用三种方式测量整数从1到10000的平方所用的时间% % 1. 用for循环,没有初始化平方数组% 2. 用for循环,初始化平方数组% 3. 用向量法计算%%版本记录%  日期             编者      变化描述% ====          ========== =====================% 2015-10-5 18:12 泡泡     源代码 %% 定义变量% ii, jj 循环索引% average1 用方式1计算所用平均时间% average2 用方式2计算所用平均时间% average3 用方式3计算所用平均时间% maxcount 循环次数% square   平方数组% %-----------------------------------------------------------------% for循环:没有初始化平方数组% 循环1次% 因为很慢maxcount = 1; % 1次重复tic; % 计时开始for jj = 1:maxcount    clear square % 把以前是这个变量名的清除    for ii = 1:10000    square(ii) = ii^2; % 平方计算    endendaverage1 = (toc)/maxcount; % 所用时间平均值%-----------------------------------------------------------------% for循环:初始化平方数组% 循环10次% 对比作用maxcount = 10; % 10次重复tic; % 计时开始for jj = 1:maxcount    clear square % Clear变量    square = zeros(1,10000); % 初始化平方数组,全部值为0    for ii = 1:10000    square(ii) = ii^2; % 平方计算    endendaverage2 = (toc)/maxcount; % 所用时间平均值%-----------------------------------------------------------------% 用向量法计算% 循环100次% 因为非常快maxcount = 100; % 100次重复tic; % 计时开始for jj = 1:maxcount    clear square % Clear变量    ii = 1:10000; % Set up vector    square = ii.^2; % 平方计算endaverage3 = (toc)/maxcount; % 所用时间平均值% 结果对比显示fprintf('for 循环 / 没有初始化数组 = %8.4f\n', average1);fprintf('for 循环/ 初始化数组 = %8.4f\n', average2);fprintf('用向量法 = %8.4f\n', average3);

结果:

可以看到,用初始化了数组合向量法几乎不耗费时间

好的编程习惯

那种既可以用向量可以解决的问题,也可以用循环解决的问题,最好用向量解决,这
是因为向量执行的速度快。

转载于:https://www.cnblogs.com/shuqingstudy/p/4856060.html

你可能感兴趣的文章
Access sql语句创建表及字段类型
查看>>
受限玻尔兹曼机(RBM)
查看>>
鼠标滚轮动画
查看>>
linux简介
查看>>
在页面里写个动态本地时间
查看>>
启动另一个app
查看>>
Redis开启远程登录连接
查看>>
当初为蜂巢样式实验过的方法
查看>>
跨域几种解决方法
查看>>
Qt程序继承QApplication发生崩溃的原因
查看>>
ant design样式不生效,在使用了css modules
查看>>
ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
查看>>
NuGet 本地服务器 公司组件库搭建 上传下载操作 模块化灵活设计
查看>>
Kafka Shell基本命令
查看>>
Vue.js——vue-resource全攻略
查看>>
md5.js aop.js ArrayList.js HashMap.js jquery.cookie.js json.js
查看>>
ORACLE SEQUENCE用法
查看>>
ios开发之路十一(ARC forbids explicit message send of 'autorelease'错误)
查看>>
PHP访问MSSQL数据库(实例代码)
查看>>
iOS开发技巧-Swift版本: 1.UITextView不同页面之间的传参
查看>>