通过一次添加一个数组元素来检查Numpy数组的商数

时间:2017-02-01 18:36:29

标签: python arrays numpy

我有一个数字的np.array。我希望用户给程序一个数字,它将返回数组中的哪个数字除以数组的总和大于或等于用户给出的数字。从左到右,并非所有可能的条件

示例:

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]

一段时间的循环?有没有办法用户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] 

不确定如何实施它。帮助

2 个答案:

答案 0 :(得分:1)

试试这个:

print(x[0:np.flatnonzero(x.cumsum()>userNum)[0]+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返回数组中非零元素的索引。在这种情况下,它返回数组中True的索引。您需要找到数组中第一个True的索引,因为这是最后使用的数字的索引。最后,您打印出从0np.flatnonzero(x.cumsum()>userNum)[0]使用的数字。

答案 1 :(得分:0)

简单地说:

x[x.cumsum()<=5]

我不明白总和的目标。