有关在Python中选择子数组的问题

时间:2019-02-01 08:28:06

标签: python

在以下python代码中:

import numpy as np
a =  np.random.normal(2, 0.1, 10)
c = [0,1,2,3,4,5,6,7,8,9]
b = [2,4]
print(a[b])
print(c[b])

为什么可以执行print(a [b]),但显示print(c [b])错误消息?

3 个答案:

答案 0 :(得分:3)

这种类型的索引仅适用于numpy.ndarray,而c只是Python list,因此您不能像numpy.ndarray那样对其进行索引。您可以先将其转换为numpy数组,然后再使用索引。

c = np.array(c)

答案 1 :(得分:0)

在python中,list接受基于整数的索引。

执行

## Replace print(c[b]) with following line
print(c[b[0]:b[1])

以上代码的输出

[2, 3]

C列表正在从索引2迭代到索引3。正如python迭代到end-1索引一样。

例如c [2:4]仅考虑索引2和索引3。

答案 2 :(得分:0)

在这样的对象上使用括号时:

a[b]

您正在使用b作为参数调用对象a的类的函数__getitem__。有关该功能的更多详细信息,请参见this

现在,如果a[b]在引发c[b]时未显示错误,则意味着__getitem__类的方法a的实现正在处理b,而c类的此方法的实现则没有。每个功能的行为都完全相同,只是隐藏了一部分调用。