使用多个函数与相关数组Numpy Python



假设下面的函数根据SetNumbers计算UvalLval函数。对于前两个数字U52599是有关系的,L52550是有关系的,因为第二个数字的标签是L,所以使用Lval方程。前一个函数是previous = numbers[1:],当前函数是current = numbers[:-1]。所以(52550 - 52599)/52550 * -100将是前两个数字的计算。方程应该被计算到SetNumbers数组的末尾。然而,代码给了我下面的错误,SetNumbers数组的长度都是15。

功能:

Set = np.array(['U', 'L', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'L', 'U'])
Numbers = np.array([ 52599, 52550, 53598, 336368, 336875, 337466, 338292, 356587, 357474, 357763, 358491, 358659, 359041, 360179, 360286])
Lval = (Numbers[:-1] - Numbers[1:])/Numbers[:-1] * -100
Uval = (Numbers[1:] - Numbers[:-1])/ Numbers[1:] * -100
Numbers * np.where(Set == 'U', Uval, Lval)
错误输出:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-3ddad609950b> in <module>
4 Uval = (Numbers[1:] - Numbers[:-1])/ Numbers[1:] * -100
5 print(len(Set))
----> 6 Numbers * np.where(Set == 'U', Uval, Lval)
<__array_function__ internals> in where(*args, **kwargs)
ValueError: operands could not be broadcast together with shapes (15,) (14,) (14,)

你的切片符号不像你想象的那样:

in: Numbers[:-1] 

是否将数组中的元素移位1。它取直到但不包括最后一个元素的所有元素。输出为:

in: Numbers[:-1] 
out: array([ 52599,  52550,  53598, 336368, 336875, 337466, 338292, 356587,
357474, 357763, 358491, 358659, 359041, 360179])

是number中的所有元素,除了最后一个360286。

您需要使用np.roll()函数将元素移动1。这将把最后一个元素滚动到前面:

in: np.roll(Numbers, 1)
out: array([360286,  52599,  52550,  53598, 336368, 336875, 337466, 338292,
356587, 357474, 357763, 358491, 358659, 359041, 360179])

所以你必须处理如何处理第一个和最后一个数字的边缘情况,例如你的数组长度是15,所以你只能为L或u获得14个新元素

相关内容

  • 没有找到相关文章

最新更新