我需要创建一个大型矩阵(数组)结构(3轴),每个元素都应该存储对Python对象(myclass实例)的引用。是否可以使用numpy来创建这样的数组。我应该使用哪种数据类型来存储Python引用? numpy的优势在于支持不同级别的切片。另一种方法是创建一个嵌套(嵌套)列表,但这是一个麻烦的解决方案。
答案 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
而不是object
。 object
只是清楚地表明你将存储任意对象而不需要任何优化。有关详细信息,请参阅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
来处理此问题。