首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab中创建具有两个向量的随机采样的向量

在matlab中创建具有两个向量的随机采样的向量
EN

Stack Overflow用户
提问于 2013-04-16 04:26:47
回答 5查看 1K关注 0票数 0

如何创建一个由两个其他向量的随机采样组成的向量?

例如

矢量1 1,3,4,7,矢量2 2,5,6,8随机矢量从矢量1或2(值1或2)随机抽取,从矢量1或2(值3或5)随机抽取...等

最后,如何让matlab重复此过程n次以绘制结果分布?

谢谢,

EN

回答 5

Stack Overflow用户

发布于 2013-04-16 04:34:39

有很多方法可以做到这一点。一种可能性是:

代码语言:javascript
复制
tmp=round(rand(size(vector1)))
res = tmp.*vector1 + (1-tmp).*vector2
票数 1
EN

Stack Overflow用户

发布于 2013-04-16 04:41:04

要获得一个混合样本,您可以使用以下代码片段的想法(不是最优的,但可能足够清楚):

代码语言:javascript
复制
a        = [1, 3, 4, 7];
b        = [2, 5, 6, 8];
selector = randn(size(a));
sample   = a.*(selector>0) + b.*(selector<=0);

对于n示例,将上面的代码放在for循环中:

代码语言:javascript
复制
for k=1:n
    % Sample code (without initial "samplee" assignments)
    % Here do stuff with the sample
end;
票数 0
EN

Stack Overflow用户

发布于 2013-04-16 04:51:18

更一般的情况是,如果X是一个矩阵,并且对于每一行,您希望从随机选择的列中抽取样本,则可以使用循环执行此操作:

代码语言:javascript
复制
y = zeros(size(X,1),1);
for ii = 1:size(X,1)
    y(ii) = X(ii,ceil(rand*size(X,2)));
end

您可以通过sub2ind使用巧妙的索引来避免循环:

代码语言:javascript
复制
idx_n = ceil(rand(size(X,1),1)*size(X,2));
idx   = sub2ind(size(X),(1:size(X,1))',idx_n);
y = X(idx);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16024136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档