2017-02-01 14 views
0

私は数のnp.arrayを持っています。私は、ユーザーにプログラムに数値を与えたいと思っています。そして、配列の合計で割り算された数値のうち、数値がユーザーが指定した数値以上であるものを返します。一度に1つの配列要素を追加してNumpy配列のQuotientを確認する

x= np.array [1,2,3,4,5] 
userNum = input (“Enter a number: ”) 

#code. Say the user inputs 5. The sum of array = 15. Start at 1/15. Go until 
#Quotient is >= userNum. In this case, it would have to go through 3 times 
#(1+2+3 = 6). Then, output the numbers it had to calculate. (output: [1 2 3] 

A whileループ:右ではなく、可能なすべての条件

例に左だけから?ユーザーnp.cumsumへの道はありますか? whileループは次のように実行していました。

Denom = (x[1]/sum(x)) 
#Start with dividing the first number 
while Denom <= userNum 
    #psuedocode: 
    #(x[1]/sum(x)) doesn't work 
    #Add the next element of the array to the one(s) already added 
    #Denom is updated to (x[1]+x[2])/sum(x). This will continue to 
    #(x1[1]+x[2]+...x[n]>=userNum 
    #Store the numbers used in a seperate array 
print 'Here are the numbers used: ' #Numbers used from array to be larger than userNum 
        #ex: [1 2 3] 

実装方法がわかりません。助けて?これはあなたに使用される番号を与える必要があります

print(x[0:np.flatnonzero(x.cumsum()>userNum)[0]+1]) 

+0

これに何らかの商を含めるのはなぜですか? – user2357112

答えて

1

はこれを試してみてください。

入力:

x = np.array([3,1,2,4,5]) 
userNum = 7 
print(x[0:np.flatnonzero(x.cumsum()>userNum)[0]+1]) 

出力:

[3 1 2 4] 

少し説明:x.cumsum()戻り累積和、及びx.cumsum()>userNum条件がアレイの各インデックスに対して真であるかどうかを示すnumpyの配列を返します。上記の例では、x.cumsum()[3, 4, 6, 10, 15]x.cumsum()>userNum[False, False, False, True, True]を返します。 np.flatnonzeroは配列内のnonzeros要素のインデックスを返します。この場合、配列内のインデックスはTrueです。配列内の最初のTrueのインデックスは、使用された最後の番号のインデックスであるため、その配列を見つける必要があります。最後に0からnp.flatnonzero(x.cumsum()>userNum)[0]までの数字を印刷します。単に

+0

チャームのように働いた!ありがとうございました! – cparks10

0

x[x.cumsum()<=5] 

私は和の目標を理解していません。

関連する問題