试图找到超过2个逻辑条件的python numpy索引

时间:2017-09-16 19:34:51

标签: python numpy logic where logical-operators

为什么

"GET /###/chat HTTP/1.1" 400

工作,但

w = data[np.where(np.logical_and(data['RA']>=(ra_in-0.1), data['RA']<=(ra_in+0.1)))]

不??? 这给出了“ValueError:无效的参数数量”错误。 'in'值是浮点数;数据是numpy.ndarrays。

1 个答案:

答案 0 :(得分:2)

documentation of numpy.logical_and说:

insert

正如您所看到的, 如何在两个类似数组对象numpy.logical_and(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) 上执行logical_and的其他参数除外{ {1}},没有其他类似数组的对象的地方。因此,简而言之, x1仅执行逻辑和两个数组

您可以使用x2的级联来执行请求的操作:

logical_and

所以我们在这里将无效的 logica_and 转换为data[np.where( np.logical_and( np.logical_and(data['RA']>=(ra_in-0.1), data['RA']<=(ra_in+0.1), np.logical_and(data['DEC']>=(dec_in-0.1), data['DEC']<=(dec_in+0.1) ))]

此外,您可以使用更优雅的逻辑和logical_and(A,B,C,D)

logical_and(logical_and(A,B),logical_and(C,D))

请注意,由于&绑定的优先级较高,因此您需要添加括号。但请注意,我们仍然有一些级联,因为:

data[np.where(
    (data['RA']>=(ra_in-0.1)) & (data['RA']<=(ra_in+0.1)) & (data['DEC']>=(dec_in-0.1)) & (data['DEC']<=(dec_in+0.1))
    )]

相当于:

&

或更多摘要:(data['RA']>=(ra_in-0.1)) & (data['RA']<=(ra_in+0.1)) & (data['DEC']>=(dec_in-0.1)) & (data['DEC']<=(dec_in+0.1)) 相当于(((data['RA']>=(ra_in-0.1)) & (data['RA']<=(ra_in+0.1))) & (data['DEC']>=(dec_in-0.1))) & (data['DEC']<=(dec_in+0.1))

相关问题