2016-11-18 19 views
6

鑑於m,我們如何能生成m等間距數字,總和爲1,使得A1 > A2 > ... > Am生成m等分數字,其總和爲1在R

例如,如果m=4那麼我們就應該有:

a <- c(0.4, 0.3, 0.2, 0.1) 

abs(diff(a)) 
#[1] 0.1 0.1 0.1 

sum(a) 
#[1] 1 

或爲m=5

b <- c(0.30, 0.25, 0.20, 0.15, 0.10) 

abs(diff(b)) 
#[1] 0.05 0.05 0.05 0.05 

sum(b) 
#[1] 

回答

4

如果你想要一個可調節的空間或啓動點,您可以使用公式來計算基於starti的空間納克點或基於所述空間的起點:

方案1:可調起點:

m = 5; s = 0.9 

seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m) 
#[1] 0.90 0.55 0.20 -0.15 -0.50 

sum(seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m)) 
#[1] 1 

方案2:可調空間:

m = 5; d = 0.2 

seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m) 
# [1] 0.6 0.4 0.2 0.0 -0.2 

sum(seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m)) 
# [1] 1 
9

如何:

rev(seq_len(m)/sum(seq_len(m))) 

a <- rev(seq_len(4)/sum(seq_len(4))) 
##[1] 0.4 0.3 0.2 0.1 
abs(diff(a)) 
##[1] 0.1 0.1 0.1 
sum(a) 
##[1] 1 

b <- rev(seq_len(5)/sum(seq_len(5))) 
##[1] 0.33333333 0.26666667 0.20000000 0.13333333 0.06666667 
abs(diff(b)) 
##[1] 0.06666667 0.06666667 0.06666667 0.06666667 
sum(b) 
##[1] 1 
相關問題