Python 3与NumPy和对象引用

时间:2011-11-19 09:28:56

标签: python arrays numpy

我需要创建一个大型矩阵(数组)结构(3轴),每个元素都应该存储对Python对象(myclass实例)的引用。是否可以使用numpy来创建这样的数组。我应该使用哪种数据类型来存储Python引用? numpy的优势在于支持不同级别的切片。另一种方法是创建一个嵌套(嵌套)列表,但这是一个麻烦的解决方案。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只需将object作为dtype,您就可以存储任何内容。

import numpy

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

任何无法识别的类型都会以这种方式运行,因此您可能希望使用myclass而不是objectobject只是清楚地表明你将存储任意对象而不需要任何优化。有关详细信息,请参阅the docs

答案 2 :(得分: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会自动检测到数组对象不属于其标准标量类型之一(float,int等),并通过自动将dtype设置为object来处理此问题。