python - 将 3d numpy 数组转换为 2d numpy 数组(其中内容是元组)

标签 python numpy

我有以下 3d numpy 数组 np.random.rand(6602, 3176, 2)。 我想将它转换为二维数组(numpypandas.DataFrame),其中每个值都是一个元组,形状为 (6602 , 3176)

This questioned 帮助我了解了如何减小维度,但我仍然在为元组位苦苦挣扎。

最佳答案

这是一个单行代码,需要几秒钟才能解决完整的 (6602, 3176, 2) 问题

a = np.random.rand(6602, 3176, 2)

b = a.view([(f'f{i}',a.dtype) for i in range(a.shape[-1])])[...,0].astype('O')

这里的技巧是将 viewcast 转换为正好跨越一行的复合数据类型。当这样一个复合数据类型被强制转换为对象时,每个复合元素都被转换为一个元组。

更新(帽子提示@hpaulj)有一个库函数可以精确地执行我们手动执行的 View 转换:numpy.lib.recfunctions.unstructured_to_structured

使用它我们可以编写一个更具可读性的版本:

import numpy.lib.recfunctions as nlr

b = nlr.unstructured_to_structured(a).astype('O')

关于python - 将 3d numpy 数组转换为 2d numpy 数组(其中内容是元组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57955264/

相关文章:

python - 寻找一种将复选框添加到列表列中的简单方法(wxPython)

python - 如何使用两个变量迭代 xpath?

python - Django 模板标签实例

Python - 取消定时器线程

c++ - numpy.dot 比原生 C++11 慢 100 倍

python - PySpark:从另一个 Notebook 导入变量时,如何抑制 PySpark 单元中的 %run 输出?

python - 将 200 个大小为 (100*100) 的 2-d numpy 数组堆叠在 3-d numpy 数组 (200 * 100 * 100) 中

python - 查找一个序列大于另一个序列的索引

python - 交换 CSV 文件中的列

python - 将列添加到稀疏矩阵