📜  NumPy Python中的数据类型对象(dtype)

📅  最后修改于: 2020-04-18 13:31:02             🧑  作者: Mango

每个ndarray都有一个关联的数据类型(dtype)对象。此数据类型对象(dtype)告知我们有关数组布局的信息。这意味着它为我们提供了有关以下信息:

  • 数据类型(整数,浮点数,Python对象等)
  • 数据大小(字节数)
  • 数据的字节顺序(小端或大端)

ndarray的值存储在缓冲区中,可以将其视为内存字节的连续块。因此,如何解释这些字节由dtype对象给出。
1, 构造数据类型(dtype)对象:数据类型对象是numpy.dtype类的实例,可以使用numpy.dtype创建它。
参数:

    • obj:要转换为数据类型对象的对象。
    • align:bool,可选,在字段中添加填充以匹配C编译器,为相似的C结构输出的内容。
    • copy:bool,可选,新建数据类型对象的副本。如果为False,则结果可能只是对内置数据类型对象的引用。
      # Python程序创建数据类型对象
      import numpy as np
      # np.int16转换为数据类型对象.
      print(np.dtype(np.int16))

      输出:

      int16
      # Python程序创建包含32位大端整数的数据类型对象
      import numpy as np
      # i4代表大小为4字节的整数
      # >表示大端字节顺序,而<表示小端字节编码.
      # dt是dtype对象
      dt = np.dtype('>i4')
      print("字节顺序为:",dt.byteorder)
      print("尺寸为:",dt.itemsize)
      print("数据类型为:",dt.name)

      输出:

      字节顺序为: >
      尺寸为: 4
      数据类型为: int32

      类型说明符(以上情况为i4)可以采用不同的形式:

      1. b1,i1,i2,i4,i8,u1,u2,u4,u8,f2,f4,f8,c8,c16,a
        (表示字节,整数,无符号整数,浮点数,指定字节长度的复数和固定长度字符串)
      2. int8,…,uint8,…,float16,float32,float64,complex64,complex128
        (这次具有大小)

      注意 :

      dtype与type不同.
      # Python程序区分和dtype。
      import numpy as np
      a = np.array([1])
      print("类型是: ",type(a))
      print("dtype是: ",a.dtype)

      输出:

      类型是: 
      dtype是:  int32

       

2, 具有结构化数组的数据类型对象数据类型对象对于创建结构化数组很有用。结构化数组是包含不同类型数据的数组。可以借助字段来访问结构化数组。字段就像为对象指定名称一样,在结构化数组的情况下,dtype对象也将被结构化。

# Python程序演示字段的使用
import numpy as np
# 结构化数据类型,包含16个字符的字符串(在“name"字段中)和两个64位浮点数的子数组(在“grades"字段中)
dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])
# 具有字段等级的对象的数据类型
print(dt['grades'])
# 具有字段名称的对象的数据类型
print(dt['name'])

输出:

('
# Python程序演示将数据类型对象与结构化数组一起使用。
import numpy as np
dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])
# x是具有学生姓名和分数的结构化数组.
# 学生姓名的数据类型为np.unicode_,标记的数据类型为np.float(64)
x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)
print(x[1])
print("约翰的成绩是: ",x[1]['grades'])
print("名字是: ",x['name'])

输出:

('John', [ 6.,  7.])
约翰的成绩是:  [ 6.  7.]
名字是:  ['Sarah' 'John']