matlab 矢量化编程(三) —— 软阈值函数

本文介绍了一种名为软阈值的数学运算,并给出了其数学表达式。软阈值运算是压缩感知和稀疏编码中常用的一种操作,用于实现信号的稀疏化表示。

dj,k^=dj,kλ,dj,kλ0,otherwisedj,k+λ,dj,kλ

function y = soft(x, T)
y = (x - abs(T) > 0) .* x

转载于:https://www.cnblogs.com/mtcnn/p/9422770.html

原创Matlab高性能代码编写内存是要先分配再使用的-MaximizingCodePerformancebyOptimizingMemoryAccess.pdf 我以前写代码常常写出     for n = 1 : xxx         a = fcn     end     后来到处偷师,学了到一定要先开内存,比如用zeros(), 比如换成 for n = xxx : -1 :1      Matlab 在使用内存的时候最有效率的方法是一次找到足够大的连续内存块,而for显然在有些情况下无法满足。 下面写了几个例子。    特别推荐的是         for n = len : -1 :1 的这种for的写法,即不需要zeros() 之类的先开内存,也可以达到预分配内存的效果,当然不知道 是不是某个版本改进之后的效果。 主要的问题来自于matlab的内存管理机制:      对于一个数组,matlab先在内存中找一块放得下的连续空间,如果这个数组一直增大到那个连续空间放不下了, matlab会去找另外一个放得下的连续空间(好像记得在什么地方听到过是找一个原来内存2倍大的地方),这样就带了 两个问题:       1. 额外的操作,找内存 + 复制; 而且这种操作有可能是很多次。       2.  额外的空间,这个时候有2份copy在内存中。导致内存不足的常见原因之一 % Test Part I clear; clc; len = 1000; LOOP = 100; tic; for t = 1 : LOOP     for n = 1 : len         for m = 1:len             x = n*m;         end     end end t1 = toc; clear x; tic; x = zeros; for t = 1 : LOOP     for n = 1 : len         for m = 1:len             x = n * m;         end     end end t2 = toc; clear x; tic; for t = 1 : LOOP     for n = len : -1 : 1         for m = len : -1 : 1             x = n * m;         end     end end t3 = toc; clear x; msg = sprintf; disp; % Test Part II len = 1000; tic; for n = 1 : len  % Loop 1     for i = 1 : len         x*i) =  n*i;     end end t1 = toc; clear x; tic; x = zeros; for n = 1 : len % Loop 2     for i = len: -1 : 1         x*i) =  n*i;     end end t2 = toc; clear x; len = 1000; tic; for n = len : -1 : 1  % Loop 3     for i = len : -1 : 1         x*i) =  n*i;     end end t3 = toc; clear x; msg = sprintf; disp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值