Python 为什么ndarray允许浮点索引

Python 为什么ndarray允许浮点索引,python,numpy,Python,Numpy,我可以知道为什么ndarray允许浮点索引访问吗?这意味着什么 >>> wk1 = numpy.arange(10) >>> wk1[1:2.8] array([1]) >>> wk1 = [1,2,3,4,5,6,7,8,9,10] >>> wk1[1:2.8] Traceback (most recent call last): File "<stdin>", line 1, in <module&

我可以知道为什么ndarray允许浮点索引访问吗?这意味着什么

>>> wk1 = numpy.arange(10)
>>> wk1[1:2.8]
array([1])
>>> wk1 = [1,2,3,4,5,6,7,8,9,10]
>>> wk1[1:2.8]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: slice indices must be integers or None or have an __index__ method
>>>
wk1=numpy.arange(10) >>>wk1[1:2.8] 数组([1]) >>>wk1=[1,2,3,4,5,6,7,8,9,10] >>>wk1[1:2.8] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:切片索引必须是整数或无,或具有_索引_方法 >>>
基本上,对于numpy数组,
int
对任何尚未为整数的输入进行调用。换句话说,它是四舍五入的<代码>1.999产生
1

e、 g

(请注意,这分别与
x[1]
x[2]
相同。)

这也适用于用作标记的列表或数组:

print x[[1.2, 3.4]]

我无法在源代码中找到它,但是查看文档,在这种情况下传递的是一个slice对象(),它看起来像是在numpy方面将输入转换为
int

这可能很有用,我想知道为什么其他类没有像numpy那样做

当我注意到这一点时,一个特别有用的时刻是,如果您的numpy数组是一个图像,并且您有一个用于鼠标单击的事件处理程序,它将
event.xdata
event.ydata
作为浮动,那么您仍然可以使用切片获得感兴趣的区域,而不必将它们转换为像素坐标。例如,假设您正在通过单击并拖动一个选择来裁剪图像或放大图像-图像中的鼠标位置通常位于亚像素坐标上,但图像以1:1的比例显示的特殊情况除外

作为旁注,非整数切片表示法(切片中的偶数复数)可用于其索引技巧类
r_
c_
,例如:

>>>np.r_[0:3:0.1]
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ,
        1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,  2.1,
        2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9])

>>>np.c_[-1:1:9j]
array([[-1.  ],
       [-0.75],
       [-0.5 ],
       [-0.25],
       [ 0.  ],
       [ 0.25],
       [ 0.5 ],
       [ 0.75],
       [ 1.  ]])

从版本1.12开始,不再允许在数据数组中使用浮点索引,并会引发错误

IndexError: only integers, slices (`:`), ellipsis (`...`),
    numpy.newaxis (`None`) and integer or boolean arrays are valid indices
使用浮动进行索引将提高索引器,例如[0,0.0]。()

使用浮动进行索引将提高索引器,例如[0,0.0]。()


(我的重点)

我同意,我也经常使用它,原因正是您所描述的。然而,python的口号是“显式优于隐式”,所以公平地说,这可能就是大多数其他python对象不这样做的原因。不管怎么说,它肯定很方便!这不管用了。看见
IndexError: only integers, slices (`:`), ellipsis (`...`),
    numpy.newaxis (`None`) and integer or boolean arrays are valid indices