您的当前位置:首页正文

Numpy.dtype的使用

来源:九壹网

Python的NumPy库中的numpy.dtype的使用

1. 介绍

1.1 菜鸟教程的概念介绍

​ 数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面:

  • 数据的类型(整数,浮点数或者 Python 对象)
  • 数据的大小(例如, 整数使用多少个字节存储)
  • 数据的字节顺序(小端法或大端法)
  • 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
  • 如果数据类型是子数组,那么它的形状和数据类型是什么。
1.2 个体的理解(若理解有错误,敬请指正)

​ 这个numpy.dtype是与numpy.array()中的dtype对象结合在一起使用的。

​ numpy.dtype() 相当于C/C++语言中的结构体中的属性,并且可以设置每个属性的大小范围,是否对齐等等。之后,把这个结构体的模板放在array数组的dtype上面,使得在给array赋值的时候,是按照numpy.dtype()中的格式来保存的。

​ 其次,必须要保证输入的元素与numpy.dtype()中的数据属性的个数和大小范围对应,否则会出现数据不完整。(若数据长度超过了numpy.dtype中设置的长度,则会发生截断)。

如果您还不是很明白,请看我下面举的例子

2. 从代码类比的角度理解numpy.dtype()

​ 这里我们要求一个student的数据结构,包含姓名(string),性别(string),年龄(int),学号(string)四个属性,分别使用C/C++和numpy.dtype来保存和输出2名学生的各种信息。

(‘Alice’,‘女’,‘18’,‘20241016’)

(‘Bob’,‘男’,‘20’,‘20241017’)

2.1 C/C++结构体的使用
// 关于C/C++中结构体的使用与Python数据分析中numpy.dtype的对比

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cstring>

using namespace std;

// 注意看,结构体是重点,类比于numpy.dtype
struct Student{
	string name; // 姓名
	string gender; // 性别
	int age; // 年龄
	string ID; // 学号
};


int main() {
	Student arr[5];
	// 设置Alice的信息,并存储到数组arr中
	arr[1].name = "Alice";
	arr[1].gender = "女";
	arr[1].age = 18;
	arr[1].ID = "20241016";

	// 设置Bob的信息,并存储到数组arr中
	arr[2].name = "Bob";
	arr[2].gender = "男";
	arr[2].age = 20;
	arr[2].ID = "20241017";
	// 使用for循环输出这两个学生的信息
	for (int i = 1; i <= 2; i++) {
		cout << arr[i].name << " " << arr[i].gender << " " << arr[i].age << " " << arr[i].ID << endl;
	}
	return 0;

}
2.2 Python中numpy.dtype的使用
# 讲解numpy.dtype的使用


import numpy as np

# 注意,这里是不是就类比于C/C++中的结构体的信息了。
norm_dtype=np.dtype([("name",'U10'),("gender","U10"),("age",int),("ID",'U10')])
#("name",'U10') 中的U10,是表明name是字符串数据类型,长度为10
# 下面开始根据自定义的数据类型创建相应的数组。

arr=np.array([[("Alice","女",18,"20241016")],[("Bob",'男',20,'20241017')]],dtype=norm_dtype) 
# 注意看 dtype=norm_dtype  这就告诉了我们,要根据这个形式来输入元素

print(arr[0]) #[('Alice', '女', 18, '20241016')]
print(arr[1]) #[('Bob', '男', 20, '20241017')]
# 同样,我还用根据相应的数据属性名称来访问相应的值
print(arr[0]['age'])  # 18

到这里,大家应该可以很清楚的认识到,Python中numpy.dtype的使用与C/C++中结构体的使用是类似的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top