Python 3 с NumPy и ссылками на объекты - PullRequest
3 голосов
/ 19 ноября 2011

Мне нужно создать большую структуру матрицы (массива) (3 оси), и каждый элемент должен хранить ссылку на объект Python (экземпляр myclass). Можно ли использовать NumPy для создания такого массива. Какой тип данных я должен использовать для хранения ссылок Python? Преимущество numpy - поддержка нарезки на разных уровнях. Альтернативой является создание вложенного (вложенного) списка, но это громоздкое решение.

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

Используйте dtype=object для хранения объектов Python в массиве.

import numpy as np

class Foo: pass

arr=np.empty(2,dtype=object)
arr[:]=[Foo(),Foo()]
print(arr)
# [<__main__.Foo instance at 0xb7827d0c>
#  <__main__.Foo instance at 0xb748b5ac>]

print(arr.dtype)
# object
1 голос
/ 19 ноября 2011

Вам не нужно делать ничего особенного: это работает из коробки:

>>> import numpy
>>> class TheClass(object):
...     pass
... 
>>> numpy.array([TheClass(), TheClass()])

array([<__main__.TheClass object at 0x10d435a50>,
       <__main__.TheClass object at 0x10d435a90>], dtype=object)

NumPy автоматически обнаруживает, что объекты массива не относятся к одному из его стандартных скалярных типов (float, int и т. Д.), И обрабатывает это, автоматически устанавливая dtype в object.

1 голос
/ 19 ноября 2011

Просто задайте object в качестве dtype, и вы можете хранить все, что захотите.

import numpy

print numpy.array([['a', (2, 2)], [1, 2+3j], [open, xrange(7)]], dtype=object)

Любой нераспознанный тип будет работать таким образом, поэтому вы можете захотеть использовать myclass вместо * 1006.*.object просто дает понять, что вы будете хранить произвольные объекты без какой-либо простой оптимизации.См. документы для получения дополнительной информации.

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