我有一个数组T
。我试图通过T1
查找指定范围内的值的个数,但是我得到了一个错误。我给出了预期的输出。
T=np.array([4.7,5.1,2.9])
T1=np.flatnonzero(2<T<3,3<T<4,4<T<5)
print(T1)
错误为
in <module>
T1=np.flatnonzero(2<T<3,3<T<4,4<T<5)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
预期输出为
T1=[1,0,1]
3条答案
按热度按时间zf9nrax11#
你需要把范围分成两部分,结果是
sum
。你也不需要在这里使用np.flatnonzero
,它与你正在做的事情没有真正的联系6psbrbz92#
为什么你认为这会奏效?
1.它在
2<T<3
中中断。你不能在numpy
中使用这种语法。你应该用(2<T) & (T<3)
替换2<T<3
,它等价于np.logical_and
。所以你需要两个布尔数组(2〈T)AND(T〈3)元素的真值,就像文档中说的那样。np.flatnonzero
只接受一个参数。如果要插入多个条件,请使用|
(或np.logical_or
)获取两个布尔数组arr1
ORarr2
元素的真值。每个值满足的条件数:
满足每个条件的值数组:
满足每个条件的值的索引数组:
c90pui9n3#
flatnonzero
与你想要什么无关。(2<T) & (T<3)
.T[(2<T) & (T<3)]
将产生关于条件的T值的数组。因此,如果您需要计算T中介于2和3之间的元素,可以执行以下操作:
若要取得您想要的,您可以执行下列动作:
要打印符合标准的实际值,您可以执行以下操作:
为了得到相应的索引,我们最后使用
flatnonzero
: