Python 为什么ndarray允许浮点索引
我可以知道为什么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&
>>> 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