numpy.average()有一个权重选项,但numpy.std()没有.有没有人有解决方法的建议?
我有一个时间序列x_0 ... x_t.我想计算数据的指数加权方差.那是:
V = SUM{w_i*(x_i - x_bar)^2, i=1 to T} where SUM{w_i} = 1 and x_bar=SUM{w_i*x_i}
Run Code Online (Sandbox Code Playgroud)
参考:http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance
目标是基本上加重观察的时间进一步缩短.这很容易实现,但我想尽可能多地使用内置的功能.有谁知道这对应于R?
谢谢
有没有办法使用numpy.percentile函数来计算加权百分位数?或者是否有人知道替代python函数来计算加权百分位数?
谢谢!
我有一个无向平面图,每个节点都有一个权重.我希望将图形分成尽可能多的连接不相交的子图(编辑:或者达到子图的最小平均权重),条件是每个子图必须达到固定的最小权重(这是一个权重之和)其节点).只包含单个节点的子图也可以(如果节点的权重大于固定的最小值).
到目前为止我发现的是一种启发式:
create a subgraph out of every node
while there is an underweight subgraph:
select the subgraph S with the lowest weight
find a subgraph N that has the lowest weight among the neighbouring subgraphs of S
merge S to N
Run Code Online (Sandbox Code Playgroud)
显然这不是最佳的.有没有人有更好的解决方案?(也许我只是无知,这不是一个复杂的问题,但我从未研究过图论......)
编辑(更多背景详细信息):此图中的节点是要为其提供统计数据的低规模管理单位.但是,这些单位需要有一定的最小人口规模,以避免与个人数据立法发生冲突.我的目标是创建聚合,以便在途中丢失尽可能少的信息.邻域关系充当图边,因为结果单元必须是连续的.
集合中的大多数单元(节点)远高于最小阈值.如示例所示(最小尺寸50),其中约5-10%低于阈值且尺寸不同:

我需要按年龄和婚姻状况计算个人的频率,所以通常我会使用:
table(age, marital_status)
Run Code Online (Sandbox Code Playgroud)
然而,每个人在采样数据后具有不同的权重.如何将其合并到我的频率表中?
这个问题与我之前提出的两个不同的问题有关:
1)重现频率矩阵图
我希望在R中重现这个情节:
我已经做到这一点,使用图形下面的代码:
#Set the number of bets and number of trials and % lines
numbet <- 36
numtri <- 1000
#Fill a matrix where the rows are the cumulative bets and the columns are the trials
xcum <- matrix(NA, nrow=numbet, ncol=numtri)
for (i in 1:numtri) {
x <- sample(c(0,1), numbet, prob=c(5/6,1/6), replace = TRUE)
xcum[,i] <- cumsum(x)/(1:numbet)
}
#Plot the trials as transparent lines so you can see the build up
matplot(xcum, type="l", xlab="Number of …Run Code Online (Sandbox Code Playgroud) 我有一个2396x34 double matrix名字,y其中每一行(2396)代表一个由34个连续时间段组成的单独情况.
我还有一个numeric[34]名称x代表34个连续时间段的单一情况.
目前我正在计算每一行之间的相关性y,x如下所示:
crs[,2] <- cor(t(y),x)
我现在需要的是cor用加权相关替换上述语句中的函数.权重向量xy.wt是34个元素长,因此可以为34个连续时间段中的每一个分配不同的权重.
我找到了这个Weighted Covariance Matrix函数,cov.wt并认为如果我第scale一个数据它应该像cor函数一样工作.实际上,您也可以为函数指定返回相关矩阵.不幸的是,似乎我不能以相同的方式使用它,因为我无法单独提供我的两个变量(x和y).
有没有人知道我可以在不牺牲太多速度的情况下以我描述的方式获得加权相关的方法?
编辑:也许某些数学函数可以应用于函数y之前,cor以获得我正在寻找的相同结果.也许如果我将每个元素乘以xy.wt/sum(xy.wt)?
编辑#2我corr在boot包中找到了另一个功能.
corr(d, w = rep(1, nrow(d))/nrow(d))
d
A matrix with two columns corresponding to the two variables whose correlation we wish to calculate.
w …Run Code Online (Sandbox Code Playgroud) 返回的方式(想想20多年)我在一本杂志中遇到了一个Gomoku游戏源代码,我为我的电脑输入了它并且玩得很开心.
游戏很难赢,但计算机AI的核心算法非常简单,并没有考虑到很多代码.我想知道是否有人知道这个算法并且有一些关于它的源或理论的链接.
我记得的是它基本上分配了一个覆盖整个电路板的阵列.然后,无论何时我或它放置一块,它都会在板上的所有位置添加一些重量,这些位置可能会影响该块.
例如(注意权重肯定是错误的,因为我不记得那些):
1 1 1
2 2 2
3 3 3
444
1234X4321
3 3 3
2 2 2
1 1 1
Run Code Online (Sandbox Code Playgroud)
然后,它只是扫描阵列中的最低或最高值的开放位置.
我模糊的事情:
这对任何人都响铃吗?任何人都有任何有用的东西吗?
我有一个程序,我保持的各种成功的轨迹东西使用collections.Counter-的每个成功的事情递增相应的计数器:
import collections
scoreboard = collections.Counter()
if test(thing):
scoreboard[thing]+ = 1
Run Code Online (Sandbox Code Playgroud)
然后,为了将来的测试,我想倾向于取得最大成功的事情.Counter.elements()似乎是理想的,因为它返回的元素(以任意顺序)重复多次等于计数.所以我想我可以做到:
import random
nextthing=random.choice(scoreboard.elements())
Run Code Online (Sandbox Code Playgroud)
但是,不会引发TypeError:'itertools.chain'类型的对象没有len().好的,所以random.choice无法使用迭代器.但是,在这种情况下,长度是已知的(或可知的) - 它是sum(scoreboard.values()).
我知道迭代未知长度列表并随机选择元素的基本算法,但我怀疑有更优雅的东西.我该怎么办?
让我们假设:
List<element> 哪个元素是:
public class Element(){
int Weight {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,按重量随机选择一个元素.例如:
Element_1.Weight = 100;
Element_2.Weight = 50;
Element_3.Weight = 200;
Run Code Online (Sandbox Code Playgroud)
所以
Element_1选择的机会是100 /(100 + 50 + 200)= 28.57%Element_2选择的机会是50 /(100 + 50 + 200)= 14.29%Element_3选择的机会是200 /(100 + 50 + 200)= 57.14%我知道我可以创建一个循环,计算总数等...
我想要了解的是,Linq在一行(或尽可能短)中做到这一点的最佳方法,谢谢.
UPDATE
我在下面找到了答案.我学到的第一件事是:Linq不是魔术,它比设计良好的循环慢.
所以我的问题就是按重量找到一个随机元素,(尽可能短的东西:)
weighted ×10
r ×4
python ×3
algorithm ×2
numpy ×2
c# ×1
correlation ×1
counter ×1
frequency ×1
gomoku ×1
graph-theory ×1
iterator ×1
linq ×1
matrix ×1
mean ×1
percentile ×1
probability ×1
random ×1
statistics ×1
statsmodels ×1
theory ×1