如果有人可以帮助解决这个问题,我将不胜感激,因为这几个小时让我有点发疯了!
我有一个 ndarray 如下:
array([[[0, 0],
[0, 2],
[0, 4]],
[[1, 0],
[1, 2],
[1, 4]]])
我想将其转换为记录数组:
array([[(0, 0),
(0, 2),
(0, 4)],
[(1, 0),
(1, 2),
(1, 4)]],
dtype=[('x', '<i4'), ('y', '<i4')])
最佳答案
您可以简单地使用 .view
“更改”dtype 和 .reshape
“删除”最后一个维度:
>>> import numpy as np
>>> arr = np.array([[[0, 0], [0, 2], [0, 4]],
... [[1, 0], [1, 2], [1, 4]]])
>>> newarr = arr.view(dtype=np.dtype([('x', 'i4'), ('y', 'i4')]))
>>> newarr = newarr.reshape(newarr.shape[:-1])
>>> newarr
array([[(0, 0), (0, 2), (0, 4)],
[(1, 0), (1, 2), (1, 4)]],
dtype=[('x', '<i4'), ('y', '<i4')])
请注意,您必须小心使用 .view
,硬编码 dtype 在这里可能不“安全”。但是您可以简单地重用当前的数据类型:
>>> newarr = arr.view(dtype=np.dtype([('x', arr.dtype), ('y', arr.dtype)]))
关于python - 将 ndarray 的最后一个维度转换为元组/重新排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426039/