Python 3与NumPy和对象引用

3 投票
3 回答
544 浏览
提问于 2025-04-17 06:38

我需要创建一个大的矩阵(数组)结构,这个结构有三个维度,每个元素都要存储一个Python对象的引用(也就是我的类的实例)。请问可以用numpy来创建这样的数组吗?我应该用什么数据类型来存储Python的引用呢?使用numpy的好处是可以在不同的层级进行切片操作。而另一种选择是创建一个嵌套的列表,但这样做会比较麻烦。

3 个回答

1

只要把 object 作为数据类型,就可以存储你想要的任何东西。

import numpy

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

任何不被识别的类型都可以这样使用,所以你可能想用 myclass 来代替 object。使用 object 只是为了明确表示你会存储一些任意的对象,而不会有 numpy 的优化。想了解更多信息,可以查看 文档

1

你不需要做什么特别的事情:这直接就能用:

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

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

NumPy会自动识别数组里的对象不是它标准的基本类型(比如浮点数、整数等),然后会自动把dtype设置为object

2

使用 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

撰写回答