当前位置: 首页 > 面试题库 >

将2D numpy数组转换为结构化数组

司空镜
2023-03-14
问题内容

我正在尝试将二维数组转换为具有命名字段的结构化数组。我希望2D数组中的每一行成为结构化数组中的新记录。不幸的是,我没有尝试过以我期望的方式工作。

我从开始:

>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
 ['World' '3.6' '2']]

我想转换为以下形式:

>>> newarray = numpy.array([("Hello",2.5,3),("World",3.6,2)], dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[('Hello', 2.5, 3L) ('World', 3.6000000000000001, 2L)]

我尝试过的

>>> newarray = myarray.astype([("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]

>>> newarray = numpy.array(myarray, dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]

这两种方法都尝试将myarray中的每个条目转换为具有给定dtype的记录,因此将插入多余的零。我不知道如何获取它以将每一行转换为一条记录。

另一尝试:

>>> newarray = myarray.copy()
>>> newarray.dtype = [("Col1","S8"),("Col2","f8"),("Col3","i8")]
>>> print newarray
[[('Hello', 1.7219343871178711e-317, 51L)]
 [('World', 1.7543139673493688e-317, 50L)]]

这次不执行任何实际转换。内存中的现有数据只是重新解释为新的数据类型。

我正在从一个文本文件中读取开始的数组。数据类型是未知的,因此在创建时无法设置dtype。我需要一个高性能,优雅的解决方案,该解决方案对于一般情况都适用,因为我将针对各种各样的应用程序进行很多次此类转换。

谢谢!


问题答案:

您可以使用numpy.core.records.fromarrays
“从(平面)数组列表创建记录数组” ,如下所示:

>>> import numpy as np
>>> myarray = np.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
 ['World' '3.6' '2']]


>>> newrecarray = np.core.records.fromarrays(myarray.transpose(), 
                                             names='col1, col2, col3',
                                             formats = 'S8, f8, i8')

>>> print newrecarray
[('Hello', 2.5, 3) ('World', 3.5999999046325684, 2)]

我正在尝试做类似的事情。我发现,当numpy从现有2D数组(使用np.core.records.fromarrays)创建结构化数组时,它将二维数组中的每一列(而不是每一行)都视为一条记录。因此,您必须移调它。numpy的这种行为似乎不是很直观,但是也许有充分的理由。



 类似资料:
  • 几天来,我一直在考虑这个“简单”的练习,结果被困住了。我都快疯了。我需要将嵌套数组转换为HTML。下面是数组的示例: 而预期的结果应该是这样的: 我已经从一个helper函数开始(从数组创建每个标记),下面是它现在的样子: 到目前为止还不错。当我试图创建实际的HTML构建器函数时,这个棘手的部分就开始了。我想迭代数组的每个元素,检查它是否有一个嵌套的元素(子),保存指定的标记,再深入一些。 到目前

  • 问题内容: 我发现了问题如何将文件路径转换为treeview?,但我不确定如何在JavaScript中获得所需的结果: 我正在尝试将路径数组转换为JSON树: https://jsfiddle.net/tfkdagzv/16/ 但是我的道路被覆盖了。 我正在尝试采取这样的事情: …然后变成… 我敢肯定这很容易,但是我缺少一些东西。 问题答案: const data = [ “/org/openbm

  • 问题内容: 我刚刚为组织此表中第70页上显示的查询层次结构数据的“关闭表”方法做了“更新/添加/删除”部分:http ://www.slideshare.net/billkarwin/sql-antipatterns- strike -背部 我的数据库如下所示: 表类别: 表类别树: 但是,从单个查询获取整棵树作为多维数组时,我遇到了一个问题。 这是我想回来的东西: 更新: 找到了此链接,但是我仍

  • 我有一堆json数据,格式如下 我下面的代码在spark中,我做了一些聚合,如下所示 上面的代码给了我一个类似于 我需要将producta1列中的上述数组值转换为json对象数组,类似于 我试过类似的方法 上面的代码片段并没有给出我想要的结果。如何在spark java中实现Json对象数组?

  • 问题内容: 我要实现的是: 我怎样才能返回对象,而是如果? 问题答案: 我找到了解决方案。在结果上创建了扩展名。 并使用像

  • 问题内容: 我想将结果数组转换为PHP中的JSON格式。这是我的代码: 我想转换为JSON格式并将JSON数据传递给jQuery插件。 问题答案: 在php> 5.2.0中可用: