说N = 150,我有步数= 100。
我想要一个能够为数组生成100(或任何数字)条目的函数,这些函数以某种速率增加,我可以设置它们并且它们总和为N.理想情况下,我会设置最小值和最大值。
Examples: min=1, max=4
distributed_array = [1, 1.1, 1.2, 1.3 ... 3.9, 4]
np.sum(distributed_array) = 150
答案 0 :(得分:2)
您的陈述过度约束了问题,因此通常无法获得有效答案。
如果您想要一个包含k
总和为N
并且步长为r
的{{1}}值的算术系列,那么
sum(x, x + r, x + 2*r, ... x + (k - 1) * r)
== k * (2 * x + (k - 1) * r) / 2 # by Gauss
== N # by the problem definition
你可以重新排列以找到
min == x == N / k - (k - 1) * r / 2
max == x + (k - 1) * r == N / k + (k - 1) * r / 2
考虑到这一点,应该清楚任何这样的系列的中位数必须是N / k
- 所以,使用你的N = 150和k = 100的例子,中位数必须是1.5 - 所以min = 1并且最大= 4是不可能的。
答案 1 :(得分:0)
您的问题是arithmetic list
(数学),这意味着如果我们知道{steps
,我们可以计算从minValue
到maxValue
需要多少sum
列表中的1}}和事先的最小/最大值。
获取sum
的{{1}}的等式是:
arithmetic list
我们现在可以解决// The sum of the list
theSum = n*(minNum+maxNum)/2
(我们需要包含n
和minNum
所需的值的数量):
maxNum
该计划:
n = theSum*2/(minNum + maxNum)
输出:
theSum = 12.0
minNum = 1.0
maxNum = 5.0
n = int(theSum*2/(minNum + maxNum))
print(np.linspace(minNum, maxNum, num=n))
并确认总和:
[ 1. 2.33333333 3.66666667 5. ]
输出:
print(sum(np.linspace(minNum, maxNum, num=n)))