你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Python 科学计算库 Numpy(一)—— 概述

2021/12/31 5:05:34

目录

一 Numpy(Numerical Python)

1. Numpy 是什么

2. Numpy 的主要用途

二 Numpy 数组 VS Python 列表

三 Numpy 数据类型和属性

1. 数据类型

(1)了解数据类型

(2)代码示例

2. 数组属性

(1)一般数组属性

(2)代码示例

四 广播和矢量化

1. 对不同维度的数组进行加法运算

 2. 对不同维度的数组进行乘法运算

五 结束语

六 参考链接


一 Numpy(Numerical Python)

1. Numpy 是什么

Numpy 是 Python 语言进行科学计算的一个基础拓展程序包,它支持大量的维度数组和矩阵运算,并且也提供了大量的数学函数库来进行数组运算。它是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

2. Numpy 的主要用途

Numpy 与 Matplotlib(Python 绘图库 Matplotlib) 等第三方库结合起来一起使用,提供了一个强大的科学数学计算环境,便于我们学习数据科学或者机器学习。

二 Numpy 数组 VS Python 列表

(1)Numpy 专门对数组的操作和运算进行了设计,存储效率和输入输出性能远远大于列表中的嵌套式运算,当数组的维度越大时,Numpy的优势更加明显。

(2)两者都可以对多维的数组进行操作,Numpy 中的 ndarray 是一个庞大的数据容器,可以轻松处理多维数组;列表通过嵌套进行多维数组的操作。

(3)Numpy 中的数组元素必须都是同质的,列表中的元素类型可以是多样的,因此列表的通用性能强于 Numpy,但在进行科学计算时,Numpy 的代码更为简单。

三 Numpy 数据类型和属性

1. 数据类型

(1)了解数据类型

Numpy 中的一般数据类型如下面的表格所示:
 

Numpy中的数据类型
数据类型描述
bool_布尔数据类型(True或者False)
int_默认的整数类型
intc与C的int类型一样,一般是int32或者int64
intp用于索引的整数类型
int8/int16/int32/int64有符号整数
uint8/uint16/uint32/uint64无符号整数
float_float64类型的简写
float16半精度类型:1个符号位,5个指数位,10个尾数位
float32单精度类型:1个符号位,8个指数位,23个尾数位
float64双精度类型:1个符号位,11个指数位,52个尾数位
complex_complex128的简写,即128位复数
complex6464位复数,表示双32位浮点数(实数与虚数部分)
complex128128位复数,表示双64位浮点数(实数与虚数部分)

(2)代码示例

一般使用 np.dtype() 语句可以对数据的类型、大小、字节顺序等进行描述:

"""
Author:XiaoMa
date:2021/12/30
"""
import numpy as np

dt = np.dtype(np.int32)#使用标量标签
print(dt)

dt = np.dtype('i1')#int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
print(dt)

dt = np.dtype('<i1')#字节顺序是通过对数据类型预先设定 < 或 > 来决定的。 < 意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。> 意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。
print(dt)

#--------------------
#结构化数据类型的使用
#--------------------
dt = np.dtype([('age', 'i1')])#创建结构化数据类型
print(dt)

a = np.array([(10,), (20,), (30,)], dtype = dt)#将数据类型应用于数组对象
print(a)
print(a['age'])#类型字段名可用于存取实际的 age 列
#-----------------------------------------------------
#创建一个student结构,用来记录学生的姓名、成绩、年龄。
#-----------------------------------------------------
student = np.dtype([('name', 'S8'), ('age', 'i1'), ('marks', 'f')])
a = np.array([('XiaoMa', '21', '99.9'), ('XiaoYang', '20', '98.8'), ('XiaoWang', '21', '97.7')], dtype = student)
print(a)

得到输出如下:
 在 python3 中 b' ' 代表字符串属于 bytes 类型,详细的介绍可以参考文章下方的链接。 

2. 数组属性

(1)一般数组属性

在 Numpy 中数组的每一个线性的维度称为一个轴(axis),即轴代表一个一维数组。当我们对着 axis = 0 进行操作时,就是对数组的每一列元素进行操作;对 axis = 1进行操作时,就是对着数组的每一行元素进行操作。

在 Numpy 中数组的维度的数目称为秩(rank),也就是数组中的轴的数目,比如一维数组的秩为1,二维数组的秩为2。

numpy.ndarray 中的一些重要的对象属性如下:

ndarray.ndim: 秩,即维度或者轴的数目

ndarray.shape: 数组的维度,对于矩阵来说n行m列

ndarray.size: 数组中的元素的个数,即 n*m

ndarray.dtype: 数组对象的元素类型

ndarray.itemsize: 每一个元素的大小,以字节为单位

ndarray.flags: 数组对象的内存信息

ndarray.real: 数组对象的实部

ndarray.imag: 数组对象的虚部

(2)代码示例

"""
Author:XiaoMa
date:2021/12/30
"""
import numpy as np

#-------------------
#Numpy 中的数据属性
#-------------------
a = np.arange(24)
print(a.ndim)#打印a的秩,目前a的维度只有1

a = a.reshape(2, 4, 3)#调整a的结构形状
print(a.ndim)

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)#使用 .shape 打印数组的行数和列数

a.shape = (3, 2)#使用 .shape 来改变数组的1形状
print(a)

x = np.array([1, 2, 3, 4, 5], dtype = np.int8)#数组的数据类型为 int8(一个字节)
print(x.itemsize)#打印字节数,为1

y = np.array([1, 2, 3, 4, 5], dtype = np.float64)# 数组的数据类型为 float64(八个字节)
print(y.itemsize)#打印字节数,为8

print(x.flags)#打印数组元素的内存信息

得到的结果如下:

四 广播和矢量化

当使用 Numpy 对不同形状的数组进行数值计算时,在相应的元素上进行对相应的数组元素的算术计算,这就被称为 Numpy 广播,如:

1. 对不同维度的数组进行加法运算

a0 = np.array([[1, 2, 3], [4, 5, 6]])
a1 = np.array([[1, 0, 0]])
print(a0 + a1)

得到输出:
 就是将一维数组加到了多维数组的每一个维度上

 2. 对不同维度的数组进行乘法运算

a0 = np.array([[1, 2, 3], [4, 5, 6]])
a1 = np.array([[1, 0, 0]])
print(a0*a1)

得到输出:

 可以看出,运算形式和加法是一样的,将会自行拓展与每一个维度相乘。

五 结束语

本篇博文主要简单介绍了 Python 语言中的科学计算基础库 Numpy 中的数据类型、数组属性以及矢量化运算,并加以代码实现加强理解。 

六 参考链接

python列表和Numpy数组的区别

菜鸟教程

python中 r'', b'', u'', f'' 的含义

Bytes类型