我一直在setup.py
努力做sdist
正确的事情.我把它归结为此.我有以下目录结构:
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
setup.py
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的setup.py
:
#!/usr/bin/env python
from distutils.core import setup
import distutils
setup(
name='a',
version='0.1',
description='a',
author='a',
author_email='a@a.com',
url='http://a.org',
packages=['my_package','my_package.my_subpackage'],
package_dir={'': '..'},
license= "a",
long_description = 'aaa',
)
Run Code Online (Sandbox Code Playgroud)
(这些'aaa'
东西只是占位符.)
无论如何,当我这样做时,它可以正常工作setup.py install
,但是当我尝试做的时候setup.py sdist
,会发生一些奇怪的事情:
MANIFEST
创建一个文件.
在副本my_package
中创建的文件夹内现有的my_package
文件夹(尽管它缺少一些安装相关的文件,我想的.)
一个dist
文件夹在里面创建了一个zipfile,里面是一个带有包名的文件夹,但是在那个文件夹里面没有像我希望的整个包,只有两个文件,setup.py
而且PKG-INFO
.
我究竟做错了什么?我该如何sdist
工作?
在python中,我有一个列表,例如:
a = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
列表将始终排序.我想为这些值分配权重,使得权重仅在值0和1之间.最大值将具有权重1,即在该示例中,5将具有权重1.
但是,1不会有权重0(0是特殊的,不包括在内).我希望所有其他权重都是最大数字的某个小数值.我不确定解决这个问题的最佳方法是什么.
我有一系列值(即一列数据),我想创建一个图,其中包含 x 轴上的数据值范围和每个值在 y 轴上的数据集中出现的频率.
我想要的是非常接近核密度图:
# Kernel Density Plot
d <- density(mtcars$mpg) # returns the density data
plot(d) # plots the results
Run Code Online (Sandbox Code Playgroud)
但是,我想要y 轴上的频率(而不是密度)。
具体来说,我正在处理网络度分布,并且想要一个带有开放圆形点的双对数比例,即这个图像。
我已经对相关资源和问题进行了研究,但还没有找到我想要的:
R's Plotting 分布的食谱接近我想要的,但不准确。我想用直方图示例中定义的“计数”替换其密度曲线示例中的 y 轴。
ecdf()
R 中的函数(即这个问题)可能是我想要的,但我想要观察到的频率,而不是 y 轴上 0 和 1 之间的归一化值。
这个问题与频率分布有关,但我想要点,而不是条。
编辑:
数据是标准的幂律分布,即
dat <- c(rep(1, 1000), rep(10, 100), rep(100, 10), 100)
Run Code Online (Sandbox Code Playgroud) 我尝试在r中编写程序"使用函数从任何分布生成随机样本".但它显示"hist.default(xbars)中的错误:'x'必须是数字"我的程序在这里
sim.clt <- function(n, ran.func,..., simsize,...)
{
xbars<-vector()
for(i in 1:simsize=simsize)
{
x<-function(ran.func)
xbars[i]<-mean(x)
}
par(mfrow=c(2,1))
hist(xbars)
qqnorm(xbars)
return(xbars)
}
sim.out<-sim.clt(n=20,ran.func="rexp",simsize=5000)
shapiro.test(sim.out)
Run Code Online (Sandbox Code Playgroud)
我是r编程的新手,所以无法弄明白,如何解决问题.谢谢...
我已经使用rnorm
函数从标准正态分布生成了大小为100的样本.我想按照标准对数字进行舍入.如果number介于0和1之间,则将以1小数点舍入.例如
0.123 -> 0.1
0.456 -> 0.5
0.98 -> 1
Run Code Online (Sandbox Code Playgroud)
如果一个数字大于1,那么它将舍入为:
2.34 -> 2
4.98 -> 5
4.4 -> 4
Run Code Online (Sandbox Code Playgroud)
你能指导我怎么做吗?
使用此功能,我可以从正态分布中进行采样.我想知道如何从限制到特定间隔的正态分布中有效地采样[a,b]
.我的琐碎方法是从正态分布中采样,然后保留值,如果它属于某个间隔,否则重新采样.但是在我得到合适的值之前可能会丢弃许多值.
我也可以使用三角形分布近似正态分布,但我认为这不够准确.
我也可以尝试处理累积函数,但可能这也会很慢.有没有有效的方法来解决这个问题?
谢谢
在进入正题之前,我们先来看看python的默认采样方式,
>>> import random
>>> c=[1,2,3,100,101,102,103,104,105,106,109,110,111,112,113,114]
>>> random.sample(c,1)
[103]
>>> random.sample(c,1)
[3]
>>> random.sample(c,1)
[3]
>>> random.sample(c,1)
[2]
>>> random.sample(c,1)
[3]
>>> random.sample(c,1)
[2]
>>> random.sample(c,1)
[106]
>>> random.sample(c,1)
[3]
>>> random.sample(c,1)
[105]
>>> random.sample(c,1)
[110]
>>> random.sample(c,1)
[103]
>>> random.sample(c,1)
Run Code Online (Sandbox Code Playgroud)
从源代码我们可以很容易地看到它实际上做了什么(以下是链接中代码的主要部分),
selected = set()
selected_add = selected.add
for i in xrange(k):
j = _int(random() * n)
while j in selected:
j = _int(random() * n)
selected_add(j)
result[i] = population[j]
Run Code Online (Sandbox Code Playgroud)
这种抽样方法随机选择了一个指标。在这种情况下,有可能选择一个非常不可能的人口成员。比如说1
上面的例子。
但让我们专注于一个更现实的场景。假设您有 16 个数字,表示来自0-15
. …
我是C ++的初学者。我想问一下:
是std::uniform_int_distribution<> dis(1, 6);
等于std::uniform_int_distribution<int> dis(1,6);
?
非常感谢。
我试图研究一个概率分布,它的矩是加泰罗尼亚数,并想出了
qcatmo <- function(p, k=4){ (qbeta(p/2+1/2, 3/2, 3/2)*2 - 1)^2 * k }
colMeans(outer(qcatmo(ppoints(10^6)), 0:10, "^"))
# 1 1 2 5 14 42 132 429 1430 4862 16796
Run Code Online (Sandbox Code Playgroud)
效果很好。但是后来我尝试从这个分布中生成随机值,并找到了三种可能的方法(A 使用我已经知道的分位数函数应用于runif
,B 使用内置rbeta
函数稍微更直接,C 使用一种拒绝采样的形式runif
) 在大样本上使用时具有明显不同的速度:
rcatmoA <- function(n, k=4){ qcatmo(runif(n), k) }
rcatmoB <- function(n, k=4){ (rbeta(n, 3/2, 3/2)*2 - 1)^2 * k }
rcatmoC <- function(n, k=4){
n0 <- ceiling(n*4/pi + 7*sqrt(n) + 35)
x0 <- runif(n0)^2
y0 <- runif(n0)^2
x0[x0 + y0 …
Run Code Online (Sandbox Code Playgroud) 我正在 C++ 中搜索一个函数,我给它( min , mode , max ),然后它返回由三角分布生成的随机数。如果有一个代码来实现这个功能那就太好了。
我的代码块正在做的是用T的F填充4X100000矩阵.让我们命名矩阵X.然后是Xij~Bernoulli(P)和P~normal(0.5,0.15),其中max(P)= 1并且min(P)= 0.
统计数据非常低效.如果有上述过程坚持的分布请帮助我.
计算速度非常慢,因为我必须用1个条目填充整个矩阵1条目,每次都是随机的.有没有办法减少显着的时间?这是非常低效的.
统计效率问题在这里
x = rnorm(100000,mean = 0.5,sd = 0.15)
x[x > 1] = 1
x[x < 0] = 0
probability = function(x){
x.sam = sample(x,1)
p = c(x.sam,1-x.sam)
return(p)
}
aggro2 = function(x){
aggro2 = sample(c(T,F),1, prob = probability(x))
return(aggro2)
}
Run Code Online (Sandbox Code Playgroud)
计算效率问题在这里
ptm = proc.time()
aggro =c()
n=100000
for (i in 1:(4*n)){
cat(round(i/(4*n)*100,2),"\n")
aggro = c(aggro, aggro2(x))
}
aggro.mat = matrix(aggro,4,n)
elapsed = proc.time()[3] - ptm[3]
cat(elapsed)
Run Code Online (Sandbox Code Playgroud) distribution ×12
r ×5
python ×4
c++ ×3
statistics ×3
performance ×2
random ×2
distutils ×1
frequency ×1
int ×1
list ×1
matrix ×1
numpy ×1
plot ×1
points ×1
rounding ×1
simulation ×1
std ×1
uniform ×1