Numpy и применение метода к колонке - PullRequest
0 голосов
/ 12 октября 2018

У меня есть массив Numpy, который содержит объекты.

Например, мой массив:

a = np.array({'a':1,'b':2},....,{'a':n,'b':n+1})

Данные не так важны, но мне нужно, чтобы каждый столбец вызывал свойство этого объекта.

Используя мой пример словаря, я хочу вызвать keys(), чтобы распечатать список ключей в этой строке и вернуть в виде массива:

a[0].keys()

Если бы я использовал Pandas, я мог бы использовать apply() для столбца и использовать лямбда-функции для этого.В этом случае я НЕ МОГУ использовать Pandas, так как я могу сделать ту же операцию для одного столбца массива?

Я пытался использовать apply_along_axis, но лямбда передает arr как целую, а не одну строкуза раз, поэтому мне нужно в основном использовать for цикл внутри моей лямбды, чтобы получить мой метод.

np.apply_along_axis(lambda b: b.keys(), axis=0, arr=self.data)

Приведенный выше код не работает!(Я знаю это).

Если есть способ сделать pandas.apply() с использованием массива numpy?

В этом случае желаемым результатом будет N строк массива со списками [a, б] в них.

1 Ответ

0 голосов
/ 12 октября 2018

Подобный массив объектов может рассматриваться как список:

In [110]: n=2;a = np.array(({'a':1,'b':2},{'a':n,'b':n+1}))
In [111]: a
Out[111]: array([{'a': 1, 'b': 2}, {'a': 2, 'b': 3}], dtype=object)
In [112]: [d.keys() for d in a]
Out[112]: [dict_keys(['a', 'b']), dict_keys(['a', 'b'])]

Вы также можете использовать frompyfunc, который будет применять функцию ко всем элементам массива (или к вещательным элементам нескольких массивов)

In [114]: np.frompyfunc(lambda d:d.keys(),1,1)(a)
Out[114]: array([dict_keys(['a', 'b']), dict_keys(['a', 'b'])], dtype=object)

Возвращает массив объектов, что хорошо в этом случае.np.vectorize также использует эту функцию, но принимает параметр otypes.

Как правило, итерация в массиве dtype объекта выполняется быстрее, чем в числовом массиве (поскольку все, что нужно сделать, этовернуть указатель), но медленнее, чем эквивалентная итерация в списке.Вычисления для массивов dtype объекта не такие быстрые, как вычисления для скомпилированного числового массива.

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