如何使用numpy.void类型

2024-04-16 16:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过scipy.io.loadmat加载了一个MATLAB .mat文件,它给了我一个numpy.void对象列表

它们是什么,如何使用,在哪里可以获得有关它们的参考文件


Tags: 文件对象ionumpy列表scipymatlabmat
1条回答
网友
1楼 · 发布于 2024-04-16 16:25:22

根据numpy文档:http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.htmlnumpy.void类型被定义为灵活的数据类型。基本上,这些数据类型没有与您正在查看的变量关联的预定义类型。如果您查看numpy,您会看到诸如floatuint8boolstring等数据类型

void是为了适应更通用、更灵活的类型,并且是为了那些不必属于这些预定义数据类型中任何一种的数据类型。当您在struct中加载时,通常会遇到这种情况,其中每个元素都有多个与多个字段关联的数据类型。每个结构元素可以有不同数据类型的组合,因此,将所有这些数据类型合并以表示此结构元素的实例将导致numpy.void

使用文档,您当然可以像处理任何其他数据类型一样执行相同的操作。看看这里的generic数据类型方法:http://docs.scipy.org/doc/numpy/reference/generated/numpy.generic.html#numpy.generic。事实上,所有numpy数据类型都是从这个泛型类派生的,包括numpy.void

在我在本文开头提供的第一个链接中,它展示了如何创建自定义记录类型的一个很好的示例,其中记录是数字元组和字符串的组合。当创建这些记录的列表时,列表中的每种类型都是numpy.void类型,并且它表明记录是这种数据类型。但是,请记住,此记录列表有一个属于此记录的数据类型,但此列表的每个元素都将是类型numpy.void


但是,作为一个自包含的问题,让我们在这里重新创建一个示例:让我们创建一个自定义记录类型,其中有两个字段与您创建的每个变量关联:

  • 具有名为name的字段的16位字符串
  • 浮点数的两元素元组,每个元组64位,字段名为grades

因此,您可以执行以下操作:

import numpy as np
dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))])

因此,让我们创建两个元素的示例列表,并实例化它们的字段:

x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)

因为我们把这个列表做成了一个numpy.array,所以我们希望它的数据类型是这样的:

type(x)

我们得到:

<type 'numpy.ndarray'>

记住,列表本身是一个numpy.array,但不是单个元素


要访问此列表的第二个元素,即第二条记录,我们需要:

x[1]

我们得到:

('John', [6.0, 7.0])

要检查第二条记录的类型,我们需要执行以下操作:

type(x[1])

我们得到:

<type 'numpy.void'> # As expected

给你一些额外的奖金

要访问第二条记录的名称,我们需要执行以下操作:

x[1]['name']

我们得到:

'John'

要访问第二条记录的等级,我们需要:

x[1]['grades']

我们得到:

array([ 6.,  7.])

要检查第二条记录中的名称类型,我们需要执行以下操作:

type(x[1]['name'])

我们得到:

<type 'numpy.string_'>

要检查第二条记录中的等级类型,我们需要:

type(x[1]['grades'])

我们得到:

<type 'numpy.ndarray'>

请注意,此列表中的每个元素都属于numpy.void类型。但是,列表中每个元素的单独字段要么是一个数字元组,要么是一个字符串。这些元素的集合的类型为numpy.void

相关问题 更多 >