在Matlab中如何快速生成均匀分布的圆带形数据?
在测试一个分类器或降维方法时,常常要用到下面形式的随机数据:
在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:上述方法产生的数据并不是真正的均乎分布,因为过程中经过了参数变换。但上面的方法的优点是快速,并且用于一般的实验足够了。