数字图像处理MATLAB—向量化循环—预分配数组
优化MATLAB代码⽅法
数字图像处理中:
MATLAB是⼀种专门为数组运算⽽设计的编程语⾔。
matlab数组赋值这⾥讨论两种优化MATLAB代码⽅法。
1. 向量化循环:
MATLAB会⾃动处理索引h。当坐标中涉及0时,会有混乱之源,因为本书和⼿册中反复强调MATLAB数组不能有0索引。
import time
import numpy as np
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time() #开始计时
c = np.dot(a,b) #对a,b 做点积
toc = time.time() #计时结束
print(c)
print("Vectorized version(向量化循环): " , str(1000*(toc-tic)) + "ms")
c = 0
tic1 = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc1 = time.time()
print(c)
print("For loop version(⼀般for循环): " , str(1000*(toc1-tic1)) + "ms")
当时处理⼩数据量时,速度快倍
处理百万数据,耗时相差400多倍。
2.预分配数组
加快代码执⾏时间的另⼀种⽅法是在程序中预分配数组的⼤⼩。在处理数值或逻辑数组时,预分配只是简单地创建有着适当维数的数组,数组的元素均为0。例如,若我们正在处理两幅⼤⼩均为〖024x1024像素的图像f和g,则预分配由如下语句构成:
⼤处理⼤数组时,预分配也可帮助我们减少存储器碎⽚。动态存储器的分配和去分配会使得存储器出现碎⽚。实际的结果是在计算过程中可能会有⾜够空间的可⽤物理存储器,但可能没有⾜够的连续空间来容纳⼀个较⼤的变董。预分配通过在计算开始时就允许MATLAB为⼤数据构造保留⾜够的存储空间,来阻⽌⽆连续空间的情形出现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论