猿问

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]) 的错误信息?


小唯快跑啊
浏览 183回答 3
3回答

临摹微笑

这种类型的索引仅适用于numpy.ndarray并且c只是一个 python,list所以你不能像numpy.ndarray. 您可以先将其转换为 numpy 数组,然后使用您的索引。c = np.array(c)

呼如林

当您在这样的对象上使用括号时:a[b]您正在__getitem__使用 b 作为参数调用对象 a 的类的函数。有关该功能的更多详细信息,请参见此处。现在,如果a[b]在c[b]引发一个错误时不显示错误,这意味着__getitem__该类的方法的实现a正在处理类型,b而该类的该方法的实现c则没有。这种行为对于每个函数都完全相同,只是调用有点隐藏。

子衿沉夜

在 python 中,列表接受基于整数的索引。执行## Replace print(c[b]) with following lineprint(c[b[0]:b[1])上面代码的输出[2, 3]C 列表正在从索引 2 迭代到索引 3。因为 python 迭代到 end-1 索引。例如 c[2:4] 将只考虑索引 2 和索引 3。
随时随地看视频慕课网APP

相关分类

Python
我要回答