numpy.ndarray的可迭代行为源于哪里?
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']
或者说,这种情况是因为传递给 ndarray
的 __init__
方法的那个(list
)对象的属性?但如果它内部是以列表的形式存储的,那我为什么不能在数组对象上使用像 list.reverse
这样的函数呢?
(顺便问一下,有没有更好的方法可以对 ndarray
对象的每个元素进行字符串操作?)
1 个回答
7
numpy.ndarray
定义了 __iter__()
方法,这个方法是让一个类型的实例可以被遍历的唯一方式。需要注意的是,numpy.ndarray
是一个用C语言扩展的类型,但这对它为什么可以被遍历并没有影响。无论是你在Python中定义的类型,还是用C语言扩展的类型,只要定义了 __iter__()
方法,就都可以被遍历。