numpy.ndarray的可迭代行为来自哪里?

时间:2011-11-11 03:53:34

标签: python numpy

numpy的ndarray类被定义为

class ndarray(__builtin__.objects)

根据我的收集,__builtin__.objects不是可迭代的类型?出于这个原因,我发现这种行为令人惊讶:

Arr = numpy.array('As Far As I Know'.split())
=> array(['As', 'Far', 'As', 'I', 'Know'], dtype='|S4')
print map(lambda x: x[0],Arr)
=> ['A', 'F', 'A', 'I', 'K']

或者这是否来自传递给list的{​​{1}}方法的(__init__)对象的属性?但是,为什么我不能在数组对象上使用像ndarray这样的方法,如果它在内部存储为列表?

(作为一方,没有人知道在list.reverse个对象的每个元素上应用字符串操作的更好方法吗?)

1 个答案:

答案 0 :(得分:6)

numpy.ndarray定义__iter__(),这是使类型的实例可迭代的通常(且唯一)机制。请注意,numpy.ndarray是C扩展类型,但这对于它可迭代的问题无关紧要。您在Python和C扩展类型中定义的两种类型都可以通过定义__iter__()来迭代。