如果有人能帮忙的话,我会非常感激,因为这让我疯狂了几个小时!
我的日程安排如下:

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来“更改”数据类型,使用.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,在这里对数据类型进行硬编码可能不“安全”。但是您可以简单地重用当前的数据类型:
>>> newarr = arr.view(dtype=np.dtype([('x', arr.dtype), ('y', arr.dtype)]))

关于python - 将ndarray的最后一个维转换为元组/recarray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43426039/

10-14 22:38
查看更多