数字图像处理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为大数据构造保留足够的存储空间,来阻止无连续空间的情形出现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值