如果你只需要命名列并且列集是不可变的,你可以使用记录数组:
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))])