您的位置:首页 > 编程语言 > MATLAB

在Matlab中如何快速生成均匀分布的圆带形数据?

2013-09-02 09:59 741 查看
在测试一个分类器或降维方法时,常常要用到下面形式的随机数据:



在matlab中怎样产生如上图所示的随数据呢?这里介绍一种比较高效的方法:首生产生一组随机的0到2*pi的角度数据,方法为调用rand先产生0到1的均匀分布数据再乘以2pi。然后再产生一组随机的半径数据:假设上图的内径为r0,带宽为d,则先用rand生成0到1的随机数a,最后半径即为a*d+r0。有了角度和数据就能成生图中的图带了。详细的matlab代码如下:

function [x] = GenCyclicData(inner_radius,band_width,num_points)

rot_deg = rand(num_points,1)*2*pi; %生成随机的角度

radius = inner_radius + band_width*rand(num_points,1);%生成随机的半径

x = [radius.*sin(rot_deg),radius.*cos(rot_deg)]; %生成最终的二难数据

end

%调用:

>> [x] = GenCyclicData(10,5,2000);

>> plot(x(:,1),x(:,2),'*');

>> axis equal %使x和y轴缩放一致,不然上图看起来就像是椭圆啦。

PS:上述方法产生的数据并不是真正的均乎分布,因为过程中经过了参数变换。但上面的方法的优点是快速,并且用于一般的实验足够了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: