我必须承认,coding非我所长。这边项目负责人给了我一个函数,让我自己生成一些测试数据来做个简单的实验,我也是整整做了两个礼拜。其间,问论坛,"doc function",追着师弟们狂问,最后才发现,对熟练的人来说,我做的简直就是so easy,太让人郁闷了。不过有收获就要分享,把这段时间以来所需要到的代码思路给大家说说看。
1.有时需要生成一些数据点集,(数据分布是column-wise的,随机打乱的是数据的列分布方式,而不改变每个数据样本的横纵坐标结构)。这里需要用到一个MATLAB(见笑了 MATLAB 还是我做数值实验的主要工具)函数:randperm(),作用是生成一系列指定范围内的随机排列整数,而且是non-negative。
解决这个问题的思路是给每一列的元素的标号重新随机排列(这样说起来。大家觉得可能不是人话,所以把程序段贴出来,有code有真相嘛...)
data=cat(2,[x;y2],[x;y3]); % Permutation Randomly idx=randperm(length(data)); RndData=data(:,idx);
先解释下这段天书()的含义:先把两个数据子集合并成一个较大的数据子集,采用横向的方法"option=2"。length(data)取到的是data的向量的最大维数(也就是这个长数据矩阵的列数,也是这个数据集合的样本数)。然后对这个length(data)按照1~length(data)的范围进行随机重排,也就是相当于把行标号重新随机排列。目的完成。
2.如果对所有数据进行重排呢?参考了一个网上的帖子 写出了如下的代码
f = [ 0101 0102 0103 0104 0205 0206 0207 0308 0309 0410 0411 0512 0513 0614 0615 0716 0817 0918 1019 1120 1221 1322 1423 1524 1625 1726 1827 1928 2029 2130 2231 2332 2433 2534 2635 2736 2837 2900 2900 2900]; temp = reshape(f,1,[]); idx = randperm(length(temp)); temp = temp(idx); [p q] = size(f); f_new = reshape(temp,p,q)
本文在撰写过程中参考了http://ilovematlab.cn/thread-237500-1-1.html的相应代码 向作者lzc901015表示感谢
看来办法还是比问题多 不过没有问题 不会倒逼着你去想解决方案,拼吧 兄弟们 不要被借口拦住了前进的脚步!!!
时间: 2024-10-27 10:38:53