var=$RANDOM 创建随机数,但我如何指定例如0到12之间的范围?
我有一个2D"热图"或PDF,我需要通过随机抽样重新创建.IE我有一个显示起始位置的二维概率密度图.我需要以与原始PDF相同的概率随机选择起始位置.
要做到这一点,我想我需要首先找到联合CDF(累积密度函数),然后选择随机统一数字来对CDF进行采样.这就是我被卡住的地方.
我如何在数字上找到我的PDF的联合CDF?我尝试沿两个维度进行累积求和,但这并没有产生正确的结果.我的统计知识让我失望.
编辑热图/ PDF是[x,y,z]的形式,其中Z是每个x,y点的强度或概率.
我非常熟悉使用Reservoir Sampling在一次通过数据的过程中从一组未确定的长度中采样.在我看来,这种方法的一个限制是它仍然需要在返回任何结果之前传递整个数据集.从概念上讲,这是有道理的,因为必须允许整个序列中的项目有机会替换先前遇到的项目以获得统一的样本.
有没有办法在整个序列评估之前能够产生一些随机结果?我正在考虑那种适合python的伟大的itertools库的懒惰方法.也许这可以在一些给定的容错范围内完成?我很感激有关这个想法的任何反馈!
为了澄清这个问题,这个图总结了我对不同采样技术的内存与流媒体权衡的理解.我想要的是属于Stream Sampling的类别,我们事先并不知道人口的长度.

显然,由于我们很可能将样本偏向人口的开头,因此不知道先验长度并且仍然得到统一样本存在看似矛盾.有没有办法量化这种偏见?是否需要权衡利弊?有没有人有一个聪明的算法来解决这个问题?
是有区别random() * random()和random() ** 2?random()从均匀分布返回0到1之间的值.
当测试两个版本的随机平方数时,我注意到了一点点差异.我创建了100000个随机平方数,并计算每个区间中有多少个数为0.01(0.00到0.01,0.01到0.02,......).似乎这些平方随机数生成的版本是不同的.
平方随机数而不是乘以两个随机数您是否重复使用随机数,但我认为分布应该保持不变.真的有区别吗?如果没有,为什么我的测试显示出差异?
我生成了两个随机分箱分配random() * random(),其中一个分类为random() ** 2:
from random import random
lst = [0 for i in range(100)]
lst2, lst3 = list(lst), list(lst)
#create two random distributions for random() * random()
for i in range(100000):
lst[int(100 * random() * random())] += 1
for i in range(100000):
lst2[int(100 * random() * random())] += 1
for i in range(100000):
lst3[int(100 * random() ** 2)] += 1
Run Code Online (Sandbox Code Playgroud)
这使 …
我需要k在范围内随机选择元素0 to n-1.n最高可达10 ^ 9.并且k可以从1 to n-1.我可以在O(n)时间内通过对包含值的数组进行混洗0 to n-1并k从中选择第一个元素来完成此操作.但是当它k很小时,这种方法既有时间也有内存效率低下.这个问题有没有O(k)解决方案?
注意:所选k数字必须不同.
我在想一个解决方案.我能想到两种方法.设R是要返回的集合.
R.继续这样做,直到|R| = k.此过程需要sum(n/i) for n+1-k <= i <= n时间和O(k)空间.k元素.此过程需要O(n + k)时间和空间.因此,对于给定的k我可以在O(k)时间中选择优选的方法.
我有一个长度为100的向量t,并希望将其分为30和70值,但这些值应随机选择,无需替换.因此,30个值中没有一个被允许在70个值的子向量中,反之亦然.
我知道R函数sample可以用来随机选择带有和不带替换的向量的值.但是,即使我使用replace = FALSE,我必须sample使用30 运行该函数两次,并选择70个值运行一次.这意味着30个值中的一些可能在70个值中,反之亦然.
有任何想法吗?
我有一个大约1000万行和4列的表,没有主键.第2列3 4(x2 x3和x4)中的数据按第1列X1中标识的50个组进行分组.
为了从表中获得5%的随机样本,我一直使用
SELECT TOP 5 PERCENT *
FROM thistable
ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)
结果返回大约500,000行.但是,如果以这种方式采样,一些组在样本中得到不相等的表示(相对于它们的原始大小).
这次,为了获得更好的样本,我想从列X1中确定的50个组中的每个组中获得5%的样本.所以,最后,我可以得到X1中50个组中每个组中5%行的随机样本(而不是整个表的5%).
我该如何处理这个问题?谢谢.
我有两个列表x和y,长度为n,x i和y i形成一对.如何在保留配对信息的同时从这两个列表中随机抽取m个值(例如x [10]和y [10]将在结果样本中一起)
我最初的想法是这样的.
代码看起来像这样.
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?
我有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) 我正在寻找一种从数据表中选择行的有效方法,这样我就可以为特定列中的每个唯一值设置一个代表性行.
我举一个简单的例子:
require(data.table)
y = c('a','b','c','d','e','f','g','h')
x = sample(2:10,8,replace = TRUE)
z = rep(y,x)
dt = as.data.table( z )
Run Code Online (Sandbox Code Playgroud)
我的目标是通过对列z中的每个字母ah采样一行来对数据表dt进行子集化.
random-sample ×10
random ×5
python ×4
algorithm ×3
r ×2
bash ×1
data.table ×1
indexing ×1
java ×1
newid ×1
numpy ×1
probability ×1
sample ×1
shell ×1
sorting ×1
statistics ×1
subset ×1
t-sql ×1
variables ×1