python - numpy 排列和位置

标签 python numpy where

我试图通过“where”在由“arange”创建的数组中查找值,但它似乎无法正常工作。这是一个例子:

from numpy import arange, where

myarr = arange(6.6,10.25,0.05)
for item in [6.6,6.65,6.7,6.8,6.9,6.95,7.95,8.0,8.1,8.15,6.2,6.25,6.35]:
 print where(myarr == item)

(array([0]),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)
(array([], dtype=int32),)

使用 Python 2.5.4、Numpy 1.3.0

提前致谢!

最佳答案

注意:

In [32]: repr(myarr[1])
Out[32]: '6.6499999999999995'

In [33]: repr(6.65)
Out[33]: '6.6500000000000004'

因此 np.arange 分配给 myarr[1] 的 float64 值与 Python 用来表示 6.65 的 float 并不完全相同.

所以,除非你真的知道自己在做什么,never test floats for equality .改用不等式:

def near(a,b,rtol=1e-5,atol=1e-8):
    try:
        return np.abs(a-b)<(atol+rtol*np.abs(b))
    except TypeError:
        return False

myarr = np.arange(6.6,10.25,0.05)
for item in [6.6,6.65,6.7,6.8,6.9,6.95,7.95,8.0,8.1,8.15,6.2,6.25,6.35]:
    print (np.where(near(myarr,item)))

# (array([0]),)
# (array([1]),)
# (array([2]),)
# (array([4]),)
# (array([6]),)
# (array([7]),)
# (array([27]),)
# (array([28]),)
# (array([30]),)
# (array([31]),)
# (array([], dtype=int32),)
# (array([], dtype=int32),)
# (array([], dtype=int32),)

关于python - numpy 排列和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618395/

相关文章:

python - 在克隆的 conda 环境中安装 tensorflow 会破坏从中克隆的 conda 环境

python - 考虑到数据分布,离散化 Pandas 的列

java - 如何将 "variables"WHERE 子句注入(inject)查询?

python - 了解 statsmodels grangercausalitytests 的输出

python - 删除与另一个 CSV 中的行相同的行

python - 无法使用 Django 访问 dev_appserver 中的 Google Cloud SQL 实例

python - 如何创建仅包含另一个数据框中已更改行的新数据框?

Python:高斯加权像素区域的标准差

hibernate - hibernate -类级别@Where对该类的集合不强制执行注解?

swift - <= 操作数要求 Swift 中的预期类型?