标签: random-sample

在允许更新的同时从分布中随机抽样的高效算法?

这是我前一段时间接受采访的问题,我找不到答案.

给定一些样本S1,S2,... Sn和它们的概率分布(或权重,无论它叫什么)P1,P2,... Pn,设计算法随机选择样本考虑其概率.我带来的解决方案如下:

  1. 构建累积的权重数组Ci,例如

    C0 = 0; Ci = C [i-1] + Pi.

同时计算T = P1 + P2 + ... Pn.这需要O(n)时间

  1. 生成均匀随机数R = T*random [0..1]
  2. 使用二进制搜索算法,返回最小i,例如Ci> = R.结果是Si.它需要O(logN)时间.

现在的实际问题是:假设我想要改变其中一个初始权重Pj.如何在O(n)时间内做到这一点?其他数据结构是可以接受的,但随机抽样算法不应该比O(logN)差.

random algorithm random-sample

6
推荐指数
1
解决办法
2350
查看次数

将矢量随机分成两组

我有一个长度为100的向量t,并希望将其分为30和70值,但这些值应随机选择,无需替换.因此,30个值中没有一个被允许在70个值的子向量中,反之亦然.

我知道R函数sample可以用来随机选择带有和不带替换的向量的值.但是,即使我使用replace = FALSE,我必须sample使用30 运行该函数两次,并选择70个值运行一次.这意味着30个值中的一些可能在70个值中,反之亦然.

有任何想法吗?

random r sample random-sample

6
推荐指数
2
解决办法
7691
查看次数

Python中配对列表的随机样本

我有两个列表xy,长度为n,x iy i形成一对.如何在保留配对信息的同时从这两个列表中随机抽取m个值(例如x [10]和y [10]将在结果样本中一起)

我最初的想法是这样的.

  • 使用zip创建元组列表
  • 随机播放元组列表
  • 从列表中选择前m个元组
  • 将元组分解为新的配对列表

代码看起来像这样.

templist = list()
for tup in zip(x, y):
    templist.append(tup)
random.shuffle(templist)
x_sub = [a for a, b in templist[0:m]]
y_sub = [b for a, b in templist[0:m]]
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很狡猾.有什么方法可以让我更清晰,更简洁,还是Pythonic?

python random-sample

6
推荐指数
1
解决办法
3834
查看次数

错误:random_sample()最多需要1个位置参数(给定2个)

我有random.sample函数的问题.这是代码:

import random
import numpy as np


simulateData = np.random.normal(30, 2, 10000)

meanValues = np.zeros(1000)

for i in range(1000):


    dRange = range(0, len(simulateData))
    randIndex = np.random.sample(dRange, 30)
    randIndex.sort()
    rand = [simulateData[j] for j in randIndex]
    meanValues[i] = rand.mean()
Run Code Online (Sandbox Code Playgroud)

这是错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-368-92c8d9b7ecb0> in <module>()
 20 
 21     dRange = range(0, len(simulateData))
---> 22     randIndex = np.random.sample(dRange, 30)
 23     randIndex.sort()
 24     rand = [simulateData[i] for i in randIndex]

mtrand.pyx in mtrand.RandomState.random_sample   (numpy\random\mtrand\mtrand.c:10022)()

TypeError: random_sample() takes at most 1 …
Run Code Online (Sandbox Code Playgroud)

python random indexing numpy random-sample

6
推荐指数
2
解决办法
6650
查看次数

使用约束来混洗列表

准备一个新的心理物理实验,我有48次原始刺激显示4次(4个条件),导致192次试验.试图在实验过程中随机化演示的顺序,我需要最大化相同原始刺激的4显示之间的距离.

请考虑 :

Table[{j, i}, {j, Range[48]}, {i, Range[4]}]
Run Code Online (Sandbox Code Playgroud)

其中j是原始刺激数和我的条件

输出样本:

 {{1, 1}, {1, 2}, {1, 3}, {1, 4}, 
  {2, 1}, {2, 2}, {2, 3}, {2, 4},   
  ...
  {47, 1}, {47, 2}, {47, 3},{47, 4}, 
  {48, 1}, {48, 2}, {48, 3}, {48, 4}}
Run Code Online (Sandbox Code Playgroud)

我怎样才能改变这192个项目的呈现顺序,最大化相同项目之间的距离j,原始刺激数量?

wolfram-mathematica random-sample

5
推荐指数
1
解决办法
304
查看次数

可以用c ++中的'rand()`来生成无偏的bool吗?

我写了以下功能

bool random_bool(double probability)
{
    double p_scaled = probability * (RAND_MAX+1) - rand();
    if ( p_scaled >= 1 ) return true;
    if ( p_scaled <= 0 ) return false;
    return random_bool( p_scaled );
}
Run Code Online (Sandbox Code Playgroud)

给定,rand()从均匀分布生成一个{0,1,...,RAND_MAX-1,RAND_MAX}数字,后续调用中的数字可以被视为独立于除加密之外的所有实际目的,这应该true以概率返回p:两个if语句true以略低于概率的方式返回p,并且false概率略高于1-p,而递归调用处理其他所有事情.

但是,以下测试失败:

long long N = 10000000000; //1e10
double p = 10000.0 / N;
int counter = 0;
for (long long i=0;i<N;i++) if (random_bool(p)) counter++;
assert(9672 < counter …
Run Code Online (Sandbox Code Playgroud)

c++ random debugging random-sample

5
推荐指数
1
解决办法
413
查看次数

使用System.Random时的时间相关性(使用System.Random.TF时不存在)

这个问题涉及System.Random当从连续种子生成连续的随机数时观察到的时间相关性的起源(其中每个种子丢弃相同数量的生成器).

使用System.Random中的mkStdGen生成随机布尔值答案1使用System.Random中的mkStdGen生成随机布尔值答案2建议(基于引用其中的reddit文章)应该丢弃前几个生成器以获取明智的结果.然而,我发现不管有多少发生器丢弃,当观察分布的时间方面时,如果用连续种子生成连续的随机数(一个丢弃每个种子的相同数量的生成器),则获得不希望的结果.

我的问题是,所采用的算法是什么 System.Random 导致了所述方式中不同种子之间的时间相关性?

如果我们生成无限序列的随机布尔值,则P(n)获得n具有相同值(例如[True,True,True]in [False,True,True,True,False])的连续布尔值的概率为(1/2)^n.作为快速检查,我们有标准化条件:

P(1)+P(2)+....P(infty) = (1/2) + (1/2)^2 + ... = 1
Run Code Online (Sandbox Code Playgroud)

以下代码:

module Main where
import Data.List
import System.Random

generateNthGenerator startGen 0 = startGen
generateNthGenerator startGen n = generateNthGenerator newGen (n-1)
  where newGen = snd $ ((random startGen) :: (Bool,StdGen)) 

better_mkStdGen generation seed = 
  generateNthGenerator (mkStdGen seed) generation

randomNums generation = 
  map (fst . random . (better_mkStdGen generation)) [0 .. …
Run Code Online (Sandbox Code Playgroud)

random algorithm haskell random-sample ghc

5
推荐指数
1
解决办法
149
查看次数

如何在Splunk中有效地采样很长时间?

我想在很长一段时间内(例如,几个月或几年)运行Splunk查询,但我正在搜索足够的数据,我只能搜索数小时或数天的数据.

但是,对于我想在Splunk中回答的问题,我会对统一或统计上无偏见的数据样本感到满意.换句话说,我希望查询返回N个事件在过去一个月内展开,而不是任何N个连续事件.

我考虑的一种方法是仅搜索事件,date_minute=0以便快速过滤1/60事件,这有助于但不是非常灵活.

有没有更好的方法在Splunk中有效地采样事件?

performance time search splunk random-sample

5
推荐指数
1
解决办法
2079
查看次数

R中runif和样本之间的区别?

在他们使用的概率分布方面?我知道runif给出了小数,而样本给出了整数,但我感兴趣的是样本是否也使用"均匀概率分布"?

r random-sample

5
推荐指数
2
解决办法
7479
查看次数

从bash中的大文件中获取随机行

如何n从无法放入内存的非常大的文件中获取随机行。

如果我可以在随机化之前或之后添加过滤器也很棒。


更新 1

就我而言,规格是:

  • > 1 亿行
  • > 10GB 文件
  • 通常随机批量大小 10000-30000
  • 512RAM 托管 ubuntu 服务器 14.10

所以从文件中丢失几行不会是一个大问题,因为无论如何它们都有 1 万分之一的机会,但性能和资源消耗将是一个问题

bash command-line random-sample line-processing

5
推荐指数
2
解决办法
2831
查看次数