Откуда берется итеративное поведение numpy.ndarray? - PullRequest
2 голосов
/ 11 ноября 2011

Класс 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), который передается методу __init__ ndarray?Но тогда почему я не могу не использовать методы, такие как list.reverse, для объекта массива, если он внутренне хранится в виде списка?

(и, кроме того, никто не знает, как лучше применить строковые операции ккаждый элемент ndarray объектов?)

1 Ответ

6 голосов
/ 11 ноября 2011

numpy.ndarray определяет __iter__(), который является обычным (и единственным) механизмом для повторения экземпляров типа.Обратите внимание, что numpy.ndarray является типом расширения C, но это не имеет значения для вопроса, почему он повторяется.Оба типа, которые вы определяете в типах расширений Python и C, можно сделать итеративными, определив __iter__().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...