【问题标题】:Random blocks without for loop没有 for 循环的随机块
【发布时间】:2014-09-06 03:44:30
【问题描述】:

在下面的代码中,我想生成 7 个随机起点。然后我想取这些起点并在矩阵 Delta 中选择与第一个随机选择的起点相对应的列号。然后,我还包括该列之后的接下来的 47 列。然后我应该使用下一个随机起点,从 Delta 中选择相应的列,然后再次包含以下 47 列。以此类推,直到使用完所有随机起点。

问题是当我使用下面的代码时,它只适用于第一个随机起点而忽略其余的?

这可以在不循环的情况下完成吗?

LogData=log(data);

Delta=diff(LogData,1,2);

max_t=size(Delta,2);

Start_YC=LogData(:,max_t);

Urnd=randi(max_t,7,1);

SRtns=Delta(:,Urnd:Urnd+47);

【问题讨论】:

  • 循环迭代之间可以有重叠列吗?
  • 是的(可能不理想,但算法并没有禁止)
  • 顺便说一句,你的循环在哪里?您说要取消不可见的循环。
  • 我正在尝试不使用循环,如果您将最后一行替换为 SRtns=Delta(:,Urnd);然后它可以工作,但只为您提供 7 个起始列。我曾希望无需循环即可获得完整版本的工作
  • 7 或 randi(max_t,7,1) 的第二个参数的大小恰好是

标签: matlab


【解决方案1】:

看看这是否适合你 -

rand_start_pts = randperm(max_t-47,7)
ind = bsxfun(@plus,rand_start_pts(:),0:47)'
SRtns = Delta(:,ind(:))

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 2018-01-20
    • 1970-01-01
    • 2021-10-12
    • 2012-08-28
    • 2012-10-29
    • 2012-11-07
    • 2013-10-28
    • 2016-08-07
    相关资源
    最近更新 更多