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

标签 python arrays numpy

如果有人可以帮助解决这个问题,我将不胜感激,因为这几个小时让我有点发疯了!

我有一个 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/

相关文章:

python - 无法在 Apple M1 芯片中为 python django 安装 firebase-admin pip 包

Python:从图像转换矩阵是 3D 而不是 2D

python - 如何从所有 pandas 列计算成对矩阵

python - 在不使用列表、集合等的情况下在 Python 中生成唯一数字

python - 以通用方式为 Python 中的所有子类实现 __neg__

python - 有没有办法自动关闭 mkstemp() 返回的 Python 临时文件

java - 按字读取文件,扫描仪

c++ - 最高和最低平均 C++

php - 查找两个 varchar 字段的最大数值

python - 在 Python 中初始化空矩阵