How to convert array into special items of structured array and revert it back?(如何将数组转换为结构化数组的特殊项并还原?)
本文介绍了如何将数组转换为结构化数组的特殊项并还原?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想对结构化数组的项而不是数字执行一些笨拙的方法。因此,例如,在处理形状(4,3)的整数数组时,我需要将其转换为长度为3的项的数组,并执行一些操作,就像它是形状(4,)的单个一维数组一样。不幸的是,这些转换本身对我来说看起来真的很复杂。我们再举一个例子:
n, m, r = 2, 3, 4
array = np.arange(n*m).reshape((n,m))
dt = np.dtype(','.join('i'*m))
arr1 = np.array([tuple(x) for x in array], dtype=dt)
>>> arr1
array([(0, 1, 2), (3, 4, 5)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
然后我对它调用一些方法,为了简单起见,让它np.tile(但它们可能完全不同):
arr2 = np.tile(arr1[:,None], r)
>>> arr2
array([[(0, 1, 2), (0, 1, 2), (0, 1, 2), (0, 1, 2)],
[(3, 4, 5), (3, 4, 5), (3, 4, 5), (3, 4, 5)]],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
我想将其转换为以下数组:
array([[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]],
[[3, 4, 5], [3, 4, 5], [3, 4, 5], [3, 4, 5]]]
我有两个问题:
- 如何在不迭代的情况下将
array转换为arr1(一串特殊项)? - 如何将
arr2(一串特殊项)转换回我想要的单项数组?
推荐答案
numpy提供了帮助器函数来执行此操作:
>>> n, m, r = 2, 3, 4
>>> array = np.arange(n*m).reshape((n,m))
>>> import numpy.lib.recfunctions as recfunctions
>>> recfunctions.unstructured_to_structured(array, dtype=np.dtype(','.join('i'*m)))
array([(0, 1, 2), (3, 4, 5)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
和相反方向:
>>> import numpy.lib.recfunctions as recfunctions
>>> recfunctions.structured_to_unstructured(arr2)
array([[[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]],
[[3, 4, 5],
[3, 4, 5],
[3, 4, 5],
[3, 4, 5]]], dtype=int32)
在这种特定的情况下,如果原始数组为dtype=np.int32,则可以使用视图:
>>> array = np.arange(n*m, dtype=np.int32).reshape((n,m))
>>> structured_view = array.view(dtype=np.dtype(','.join('i'*m)))
>>> structured_view
array([[(0, 1, 2)],
[(3, 4, 5)]], dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
视图的优势在于它创建了一个新的数组。当然,这可能是缺点,如果您更改了您的视图,并且不期望原始数组也会更改。
相反,它不会处理您想要的形状,但您始终可以重塑形状:
>>> arr2.view(dtype=np.int32)
array([[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5]], dtype=int32)
使用视图可能会变得既棘手又快速。
这篇关于如何将数组转换为结构化数组的特殊项并还原?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:如何将数组转换为结构化数组的特殊项并还原?
基础教程推荐
猜你喜欢
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
