鉴于m
,我们如何生成m
等间距数字,其总和为1
,以便A1 > A2 > ... > Am
?
例如,如果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]
答案 0 :(得分: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
答案 1 :(得分:4)
如果您想要一个可调节的空间或起点,您可以使用公式根据起点或起点根据空间计算空间:
场景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