2017-12-23 11 views
-2

N = 150と言うと、ステップ数は100です。増加する数値を範囲全体に分散させ、その合計がNになるようにするにはどうすればよいですか?

配列に100(または任意の数を選択して)エントリを作成する関数が必要です。設定可能な速度で増加しています。それらはすべてNに合計されます。理想的にはminとmaxを設定します。

Examples: min=1, max=4 

distributed_array = [1, 1.1, 1.2, 1.3 ... 3.9, 4] 

np.sum(distributed_array) = 150 
+0

偶数ステップで同時に最小値、最大値、合計値、およびステップ数を指定することはできません。それには十分な自由度がありません。 – user2357112

+0

最小値、最大値、およびステップ数が合計を決定します。 – user2357112

+0

間隔は.1である必要はありません。ちょうど1から4までの間隔を置いてN(この例では150)に加算する必要があります。間隔はいくらか一貫していなければなりません。 – Nish

答えて

2

あなたの声明それは頻繁に持っていないような問題を制約上、有効な答え。

あなたがステップサイズrNk値の和を含む算術級数をしたい場合、あなたは

min == x == N/k - (k - 1) * r/2 

max == x + (k - 1) * r == N/k + (k - 1) * r/2 

は、このを見て見つけることが並べ替えることができ

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 

を取得し、それがそのシリーズの中央値はN/kでなければならないことが明らかです。N = 150、k = 100の例を使用すると、中央値は1.5でなければなりません。min = 1、max = 4は不可能です。

+0

これは正しいです、あなたは簡単にminとmaxを選択することはできません。 – Nish

0

あなたの問題は、私たちは事前にリストのsumと最小/最大値を知っていれば、我々は、我々がminValueからmaxValueに取らなければならないどのように多くのsteps計算できることを意味arithmetic list(数学)です。

arithmetic listsumを取得するための式は次のとおりです。

// The sum of the list 
theSum = n*(minNum+maxNum)/2 

現在(値の数は、我々はminNummaxNumを含む持っている必要があります)nのために解決することができます:

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))) 

出力:

12.0 
+0

これは、np.sum(array)= N – Nish

+0

@Nish Okを保証しません。私は私の答えを編集しました。これで、必要な合計、最小値、最大値を指定できるようになりました。 – Ivan86

関連する問題