我想创建一个三维数组,数组中的每个值代表一个字典。
例如:myArray[m][n][k]
{'position':(0,0), 'boundary': [(8,8)(512,512)]}
我知道,可以通过在dtype
numpy.ndarray
参数来定义它
numpy.ndarray(shape=(m, n, k), dtype=...)
dtype
应该指定如上所述的确切字典语法
答案 0 :(得分:2)
AFAIK没有。您可以做的最好的事情是定义dtype = object
(例如,如果您尝试设置dtype=dict
,则会获得这些内容) - 然后手动填充它。什么都不能确保字典的结构("语法",如你所说) - 你可以使用一个类。
然而,请注意numpy针对标量变量进行了优化,您的使用非常奇怪。
答案 1 :(得分:1)
如果您只需要命名列并且列集是不可变的,则可以使用记录数组:
In [30]: arr = np.zeros((3,3), dtype=[('position', 'f8', 2),
('boundary', 'i8', (2,2))]); arr
Out[30]:
array([[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
([0.0, 0.0], [[0, 0], [0, 0]])],
[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
([0.0, 0.0], [[0, 0], [0, 0]])],
[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
([0.0, 0.0], [[0, 0], [0, 0]])]],
dtype=[('position', '<f8', (2,)), ('boundary', '<i8', (2, 2))])
In [31]: arr['boundary'][0] = [[1,2], [3,4]]
In [32]: arr
Out[32]:
array([[([0.0, 0.0], [[1, 2], [3, 4]]), ([0.0, 0.0], [[1, 2], [3, 4]]),
([0.0, 0.0], [[1, 2], [3, 4]])],
[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
([0.0, 0.0], [[0, 0], [0, 0]])],
[([0.0, 0.0], [[0, 0], [0, 0]]), ([0.0, 0.0], [[0, 0], [0, 0]]),
([0.0, 0.0], [[0, 0], [0, 0]])]],
dtype=[('position', '<f8', (2,)), ('boundary', '<i8', (2, 2))])