gpt4 book ai didi

python - 将numpy数组转换为结构化数组

转载 作者:行者123 更新时间:2023-12-04 12:05:21 51 4
gpt4 key购买 nike

假设我有以下数组:

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/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com