matlab 向量法建数组(推荐)
一、用赋值的方法可以扩展一个已知的数组:
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的平方所用的时间
- %
- % . 用for循环,没有初始化平方数组
- % . 用for循环,初始化平方数组
- % . 用向量法计算
- %
- %版本记录
- % 日期 编者 变化描述
- % ==== ========== =====================
- % -- : 泡泡 源代码
- %
- % 定义变量
- % ii, jj 循环索引
- % average1 用方式1计算所用平均时间
- % average2 用方式2计算所用平均时间
- % average3 用方式3计算所用平均时间
- % maxcount 循环次数
- % square 平方数组
- %
- %-----------------------------------------------------------------
- % for循环:没有初始化平方数组
- % 循环1次
- % 因为很慢
- maxcount = ; % 1次重复
- tic; % 计时开始
- for jj = :maxcount
- clear square % 把以前是这个变量名的清除
- for ii = :
- square(ii) = ii^; % 平方计算
- end
- end
- average1 = (toc)/maxcount; % 所用时间平均值
- %-----------------------------------------------------------------
- % for循环:初始化平方数组
- % 循环10次
- % 对比作用
- maxcount = ; % 10次重复
- tic; % 计时开始
- for jj = :maxcount
- clear square % Clear变量
- square = zeros(,); % 初始化平方数组,全部值为0
- for ii = :
- square(ii) = ii^; % 平方计算
- end
- end
- average2 = (toc)/maxcount; % 所用时间平均值
- %-----------------------------------------------------------------
- % 用向量法计算
- % 循环100次
- % 因为非常快
- maxcount = ; % 100次重复
- tic; % 计时开始
- for jj = :maxcount
- clear square % Clear变量
- ii = :; % Set up vector
- square = ii.^; % 平方计算
- end
- average3 = (toc)/maxcount; % 所用时间平均值
- % 结果对比显示
- fprintf('for 循环 / 没有初始化数组 = %8.4f\n', average1);
- fprintf('for 循环/ 初始化数组 = %8.4f\n', average2);
- fprintf('用向量法 = %8.4f\n', average3);
结果:
可以看到,用初始化了数组合向量法几乎不耗费时间
好的编程习惯
那种既可以用向量可以解决的问题,也可以用循环解决的问题,最好用向量解决,这
是因为向量执行的速度快。
matlab 向量法建数组(推荐)的更多相关文章
- MATLAB元胞数组
MATLAB元胞数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元 ...
- matlab的cell数组
matlab的cell数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每 ...
- Matlab计算机视觉/图像处理工具箱推荐
Matlab计算机视觉/图像处理工具箱推荐 转载http://cvnote.info/matlab-cv-ip-toolbox/ 计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理 ...
- MATLAB 向量
MATLAB 向量: 1.MATLAB 行向量: 创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素. 2.MATLAB 列向量: 创建列向量括在方括号中的元素的集合,使用分号来分隔的元素. ...
- Matlab 之 字符串数组查找
Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...
- matlab矩阵与数组
数组运算:数与数组加减:k+/-A %k加或减A的每个元素数组乘数组: A.*B %对应元素相乘数组乘方: A.^k %A的每个元素k次方:k.^A,分别以k为底A的各元素为指数求幂值数除以数组: k ...
- matlab之细胞数组
学习matlab的一个博客:https://blog.csdn.net/smf0504/article/details/51814362 Matlab从5.0版开始引入了一种新的数据类型—细胞( ce ...
- matlab 读取输入数组
In an assignment A(I) = B, the number of elements in B and I must be the same MATLAB:index_assign_el ...
- matlab中的数组与矩阵
今天做图像处理时,看到一个矩阵的处理,简要谈谈下面几段代码: 首先是介绍矩阵(说明:在matlab中无是数组还是矩阵都是按列来存储的) 首先是一些特殊矩阵的建立 zeros(m,n)%建立全0矩阵 o ...
随机推荐
- 如何在微软Hyper-V下发挥SQL Server最大功效
要建设稳定运行的虚拟化SQL Server系统,关键是确保虚拟化管理软件配置能提供数据库所需的资源.SQL Server是CPU密集型技术,因此支撑它的虚拟机需要能获得充足的处理器资源,同时不能引起与 ...
- 在阿里云ECS(CentOS6.5)上安装redis
下载所需的redis 命令: wget http://download.redis.io/releases/redis-3.0.7.tar.gz 结果: 解压redis压缩文件: 命令: .tar.g ...
- STM32硬件IIC操作
Stm32具有IIC接口,接口有以下主要特性 多主机功能:该模块既可做主设备也可做从设备 主设备功能 C地址检测 位/10位地址和广播呼叫 支持不同的通讯速度 状态标志: 发送器/接收器模式标志 字节 ...
- el5,6,7的ntpdate服务
在el5里没有ntpdate服务 在el6里有ntpdate服务 在el7里有ntpdate服务
- Json填充到Form中
很多框架都支持将json解释到grid的或者form中,个人手痒,自己写了一个.所用到的内容主要是javascript对json的遍历.如: for (var key in json) { alert ...
- hisi出的H264码流结构
hisi出的H264码流结构: IDR帧结构如下: 开始码 + nalu + I帧 + 开始码 + nalu + SPS + 开始码 + nalu + PPS + ...
- RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- linux在线预览pdf文件开发思路
准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...
- IOS设计模式--代理 (委托)
原文 http://blog.csdn.net/lovefqing/article/details/8270111 委托(delegate)也叫代理是iOS开发中常用的设计模式.我们借助于protoc ...
- centos5.5开机自动启动服务的方法
*** chkconfig --list 查看所有的***chkconfig --list smb 查看指定的输出的结果:httpd 0:off 1:off 2:off ...