在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:上述方法产生的数据并不是真正的均乎分布,因为过程中经过了参数变换。但上面的方法的优点是快速,并且用于一般的实验足够了。
在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:上述方法产生的数据并不是真正的均乎分布,因为过程中经过了参数变换。但上面的方法的优点是快速,并且用于一般的实验足够了。
相关文章推荐
- [转]如何快速生成100万不重复的8位均匀分布的随机编号?
- Oracle中如何用一条SQL快速生成10万条测试数据
- 如何生成均匀分布随机整数
- 【转】Oracle中如何用一条SQL快速生成10万条测试数据
- 如何快速生成数据文件
- 如何快速生成2000万行数据
- Oracle中如何用一条SQL快速生成1大量测试数据
- MATLAB 2015b randi函数生成随机均匀分布信号的用法
- Oracle中如何用一条SQL快速生成10万条测试数据
- matlab的rand()函数产生均匀分布函数的正确用法 / matlab 中如何产生0-1上均匀分布的随机数
- matlab中randi代替randint生成随机均匀分布信号的用法
- 关于data factory的介绍——即如何快速生成大批量数据
- 如何快速生成Insert数据插入语句?
- Oracle中如何用一条SQL快速生成10万条测试数据(转)
- 如何快速生成数据文件(fsutil命令,使用CreateFile和SetEndOfFile API函数,fopen和fseek RTL函数)
- Oracle中如何用一条SQL快速生成10万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- 如何一条SQL快速生成100万条测试数据
- Oracle中如何用一条SQL快速生成10万条测试数据
- 利用Photoshop在Matlab中快速生成数据挖掘数据集、聚类、分类数据集