Python - ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

时间:2015-05-16 02:16:01

标签: python arrays numpy

我对编程很陌生,我无法弄清楚如何在P**2等函数中操作Numpy数组。

import math
import numpy
span_x = numpy.array([0,250,500,750,1000])
P = span_x
example = P**2
span_y = [example for i in P]
y = float(input("Enter y: "))
bracket1 = min(span_y, lambda span_y: abs(span_y-y))
if bracket1 < y:
    for i in span_y:
        bracket2 = span_y[span_y.index(bracket1) + 1]
else:
    for i in span_y:
        bracket2 = span_y[span_y.index(bracket1) - 1]
print "Brackets: ", bracket1, bracket2

我尝试过不使用Numpy数组,但收到了TypeError。

我的主要问题是我有一个x值(span_x)数组,我希望将它放入像P**2这样的函数中并获取y值(span_y)数组。然后,用户输入y值,我想检查span_y中哪个y值最接近此输入,即bracket1bracket2是第二个最接近的y值。我很乐意帮忙!

2 个答案:

答案 0 :(得分:1)

for ((GPCount=0; GPCount< $GPCnt; GPCount++)) do G=${GPArr[$GPCount]} G="$(sed -n '2p' $file.txt|cut -d" " -f7)" printf "%d\n" "$G" >>$out.txt done 是一维数组的列表,因此span_y不能按预期工作并返回一个函数。之后min引发异常。 span_y.index(bracket1)应该像这样初始化

span_y

span_y = list(example) 中的键函数(lambda)作为命名参数传递给in documention

min

答案 1 :(得分:1)

在NumPy中,您可以并且应该对以下操作进行矢量化:

span_y = span_x**2
y = float(input("Enter y: "))
bracket1 = np.array((span_y, np.abs(span_y - y))).min(axis=0)
bracket2 = np.zeros_like(bracket1)
bracket2[ bracket1 < y ] = np.roll(span_y, 1)
bracket2[ bracket1 >= y] = np.roll(span_y, -1)