我可以知道为什么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
>>>
答案 0 :(得分:6)
不再允许在ndarray中使用浮点索引,并且从版本1.12开始引发错误。
IndexError: only integers, slices (`:`), ellipsis (`...`),
numpy.newaxis (`None`) and integer or boolean arrays are valid indices
使用浮点数进行索引会引发 IndexError,例如[0,0.0]。 (See 1.11 release notes)
使用浮点数进行索引引发 IndexError,例如[0,0.0]。 (See 1.12 release notes)
(我的重点)
答案 1 :(得分:5)
这可能很有用,我想知道为什么其他类不会像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. ]])
答案 2 :(得分:3)
基本上,对于numpy数组,在任何不是整数的输入上调用int
。换句话说,它向下舍入。 1.999
会产生1
等等。
e.g。
import numpy as np
x = np.arange(10)
print x[1.9]
print x[2.1]
(请注意,这与x[1]
和x[2]
分别相同。)
这也适用于用作指标的列表或数组:
print x[[1.2, 3.4]]
答案 3 :(得分:3)
我无法在源代码中跟踪它,但是查看文档,在这种情况下传递的是切片对象(http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html),看起来输入正在在事物的坎坷方面扮演ints
。