有没有办法确定numpy数组是否是记录/结构数组?

Wan*_*ang 6 python arrays numpy

我找不到任何方法来确定数组是否是记录数组:

>>> import numpy as npy
>>> c0=npy.array([1,2])
>>> c=c0.view(dtype=[('x',int),('y',int)])
>>> c
array([(1, 2)], 
      dtype=[('x', '<i8'), ('y', '<i8')])
Run Code Online (Sandbox Code Playgroud)

类型总是numpy.ndarray

>>> type(c)
<type 'numpy.ndarray'>
>>> isinstance(c,npy.recarray)
False
Run Code Online (Sandbox Code Playgroud)

元素类型总是numpy.void

>>> type(c[0])
<type 'numpy.void'>
Run Code Online (Sandbox Code Playgroud)

现在我使用dtype.fields来确定它:

>>> def isRecarray(a):
    return a.dtype.fields != None

>>> isRecarray(c0)
False
>>> isRecarray(c)
True
Run Code Online (Sandbox Code Playgroud)

有没有官方的方法来确定数组是否是记录数组?

met*_*ure 2

这些都不是记录数组。根据文档

>>> x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', float), ('y', int)])
>>> y = x.view(np.recarray)
>>> type(x), type(y)
(<type 'numpy.ndarray'>, <class 'numpy.core.records.recarray'>)
Run Code Online (Sandbox Code Playgroud)

ndarray.view创建对同一内存的新引用,并且正如您所调用的那样,它还命名了字段。c0你的和之间没有基本的类型差异c,它们都是 ndarrays。