Python 3与NumPy和对象引用
我需要创建一个大的矩阵(数组)结构,这个结构有三个维度,每个元素都要存储一个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