繁体   English   中英

将ndarray的最后一个维度转换为元组/重新排列

[英]Convert last dimension of ndarray to tuple/recarray

如果有人可以帮忙解决这个问题,我会非常感激,因为这让我有点疯狂了几个小时!

我有一个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来“改变” .reshape.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在这里可能不是“安全”。 但您可以简单地重用当前的dtype:

>>> newarr = arr.view(dtype=np.dtype([('x', arr.dtype), ('y', arr.dtype)]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM