首页 > 代码库 > 着手实验所碰到的Matlab问题

着手实验所碰到的Matlab问题

我必须承认,coding非我所长。这边项目负责人给了我一个函数,让我自己生成一些测试数据来做个简单的实验,我也是整整做了两个礼拜。其间,问论坛,"doc function",追着师弟们狂问,最后才发现,对熟练的人来说,我做的简直就是so easy,太让人郁闷了。不过有收获就要分享,把这段时间以来所需要到的代码思路给大家说说看。

1.有时需要生成一些数据点集,(数据分布是column-wise的,随机打乱的是数据的列分布方式,而不改变每个数据样本的横纵坐标结构)。这里需要用到一个MATLAB(见笑了 MATLAB 还是我做数值实验的主要工具)函数:randperm(),作用是生成一系列指定范围内的随机排列整数,而且是non-negative。

解决这个问题的思路是给每一列的元素的标号重新随机排列(这样说起来。大家觉得可能不是人话,所以把程序段贴出来,有code有真相嘛...)

data=http://www.mamicode.com/cat(2,[x;y2],[x;y3]);>
先解释下这段天书(偷笑)的含义:先把两个数据子集合并成一个较大的数据子集,采用横向的方法"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表示感谢

看来办法还是比问题多 不过没有问题 不会倒逼着你去想解决方案,拼吧 兄弟们 不要被借口拦住了前进的脚步!!!

着手实验所碰到的Matlab问题