我想要创建一个三维数组,数组中的每个值表示一个字典。
例如:myArray[m][n][k]类型为{'position':(0,0), 'boundary': [(8,8)(512,512)]}
我知道,可以通过在dtype中指定numpy.ndarray参数来定义
numpy.ndarray(shape=(m, n, k), dtype=...)什么是dtype来指定正确的字典语法,如上面所示
发布于 2014-12-01 11:59:18
AFAIK没有。最好的方法是定义dtype = object (例如,如果您尝试设置dtype=dict ),然后手动填充它。没有什么能确保字典的结构(如您所称的“语法”)--您可以为此使用一个类。
但是,请注意,numpy是针对标量变量优化的,您的用法非常奇怪。
发布于 2014-12-01 17:14:38
如果只需要命名列,且列集是不可变的,则可以使用记录数组:
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))])https://stackoverflow.com/questions/27227851
复制相似问题