假设我有以下数组:
arr = np.array([[1,2], [3,4]], dtype='u1')
我想把它转换成这样的结构化数组:strarr = np.array([(1,2), (3,4)], dtype=[('a', 'u1'), ('b', 'u1')])
如果我只是尝试arr.astype([('a', 'u1'), ('b', 'u1')])
它返回>>> array([[(1, 1), (2, 2)],
[(3, 3), (4, 4)]], dtype=[('a', 'u1'), ('b', 'u1')])
如何转换数组以便它使用一行的所有元素来填充字段(前提是数字匹配)而不是复制每个元素?
最佳答案
为此有特殊的帮助函数:
>>> from numpy.lib.recfunctions import unstructured_to_structured
所以,>>> import numpy as np
>>> arr = np.array([[1,2], [3,4]], dtype='u1')
>>> unstructured_to_structured(arr, dtype=np.dtype([('a', 'u1'), ('b', 'u1')]))
array([(1, 2), (3, 4)], dtype=[('a', 'u1'), ('b', 'u1')])
您还可以创建 View :>>> arr.ravel().view(dtype=np.dtype([('a', 'u1'), ('b', 'u1')]))
array([(1, 2), (3, 4)], dtype=[('a', 'u1'), ('b', 'u1')])
在这种简单的情况下,这很好,但是如果您选择使用 View ,有时您必须担心数组是如何打包的。请注意, View 不会复制底层缓冲区!如果您使用大型阵列,这可以使其效率更高。
关于python - 将numpy数组转换为结构化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64051498/