numpy.ndarray的可迭代行为源于哪里?

2 投票
1 回答
1641 浏览
提问于 2025-04-17 06:06

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__() 方法,就都可以被遍历。

撰写回答