Ошибка объектов массива взаимодействий Python 2.6 - PullRequest
3 голосов
/ 06 января 2012

У меня есть многомерный массив объектов. Я хочу взаимодействовать с объектами, используя итератор nditer. Вот пример кода:

import numpy as np

class Test:
    def __init__(self,a):
        self.a = a
    def get_a(self):
        return self.a

b = np.empty((2,3),dtype = object)

t_00 = Test(0)
t_01 = Test(1)
t_11 = Test (11)

b[0,0] = t_00
b[0,1] = t_01
b[1,1] = t_11

for item in np.nditer(b,flags = ["refs_ok"]):
    if item:
        print item.get_a()

Я бы ожидал, что «элемент» будет содержать ссылку на объект, который я могу использовать для доступа к данным. Однако я получаю следующую ошибку: AttributeError: у объекта 'numpy.ndarray' нет атрибута 'get_a' У меня вопрос, как я могу пройти через массив для доступа к объекту в массиве?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Итерация по массиву с nditer дает вам представление о ячейках исходного массива в виде 0-мерных массивов. Для необъектных массивов это почти эквивалентно созданию скаляров, поскольку 0-мерные массивы обычно ведут себя как скаляры, но это не работает для объектных массивов.

Если вы решили пройти через nditer, вы можете извлечь элементы из 0-мерных представлений с помощью метода item():

for element in np.nditer(b,flags = ["refs_ok"]):
    element = element.item()
    if element:
        print(element.get_a())
0 голосов
/ 06 января 2012

Метод итерации array.flat будет работать и может подтвердить, что он работает так, как вы ожидаете

for item in b.flat:
    if item:
        print item.get_a()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...