本篇文章介绍了一些Numpy的基础操作。
NumPy 是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
📙参考:NumPy 数据类型 | 菜鸟教程 (runoob.com)
1.Numpy ndarray对象
Numpy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合。
下标以0开始进行集合中元素的索引。
ndarray对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray内容:
一个指向数据的指针
数据类型或dtype,描述在数组中的固定大小值的格子
一个表示数组形状的元组(shape),表示各个维度大小的元组
一个跨度元组(stride)
1.1 创建对象
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
名称 | 描述 |
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 标识对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 为逻辑值,默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
🙌举个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/31bcc1a80eb1696174563770c010ca24.png)
1.2 ndarray对象常见的属性
属性 | 说明 |
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,即矩阵n行m列 |
ndarray.size | 数组元素的总个数,相当于上行的n*m |
ndarray.dtype | ndarray对象的元素类型 |
🙌举个例子:
(1)ndarray.ndim
![](https://i-blog.csdnimg.cn/blog_migrate/7f78f5c89328c7d3ed938021e01bcd01.png)
(2)ndarray.shape
![](https://i-blog.csdnimg.cn/blog_migrate/aa5fd87d94af4603295d297d221ee232.png)
(3)ndarray.size
![](https://i-blog.csdnimg.cn/blog_migrate/78dd3da3e099de716f0771b3508cf617.png)
(4)ndarray.dtype
![](https://i-blog.csdnimg.cn/blog_migrate/e89c75eb2f257777214ee6272e3463f3.png)
1.3 数据类型对象(dtype)
数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用。
!!!最大的一点是,结构化数据类型的使用。
结构化数据类型,类型字段和对应的实际类型将被创建。
1.3.1 应用一
(1)首先创建结构化数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/7696998d34ea25819c5e4e878e253f2c.png)
(2)应用实例
![](https://i-blog.csdnimg.cn/blog_migrate/f36edbf9fe0357702ba20263e9d26718.png)
(3)取值
类型字段名可以用于存取实际的age列的值。
![](https://i-blog.csdnimg.cn/blog_migrate/078965f3d4346d2962bae8bfc08387be.png)
💡总代码:
![](https://i-blog.csdnimg.cn/blog_migrate/b352d4ec6bc316ad2bf08cbd3e01ad24.png)
1.3.2 应用二
定义一个结构化数据类型 student,包含字符串字段 name,整数字段 age,及浮点字段 marks,并将这个 dtype 应用到 ndarray 对象。
![](https://i-blog.csdnimg.cn/blog_migrate/758c59e80acea262e53916a1d628e032.png)
⏰总结:
可以先将dtype定义成一个结构化数据,然后再定义array,定义结构化数据的很多个数据的集合。相当于student=np.dtype()封装成一个类,然后a定义成student的集合。
2. NumPy数组形态操作
NumPy处理的最基础数据类型是由同种元素构成的多维数组,简称数组。
数组中所有元素的类型必须是相同的,元素可以用整数索引,初始下标为0。
ndarry的对象属性见1.2,此部分主要介绍对它的形态操作方法。
方法 | 说明 |
ndarray.shape(n,m) | 不改变数组,返回一个维度为(n,m)的数组 |
ndarray.resize(new_shape) | 直接修改数组 |
ndarray.swapaxes(ax1,ax2) | 将这两个维度进行调换 |
ndarray.flatten() | 对数组进行降维,返回一个折叠后的数组 |
ndarray.ravel() | 同flatten,返回一个视图 |
🙌举个例子
![](https://i-blog.csdnimg.cn/blog_migrate/2cfce0f4790fcb6f5234003ea7f13d35.png)
3. 创建数组
详情可以参考NumPy 从已有的数组创建数组 | 菜鸟教程 (runoob.com)
方法 | 说明 |
numpy.empty() | 创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组 |
numpy.zeros() | 创建指定大小的数组,数组元素以 0 来填充 |
numpy.ones() | 创建指定形状的数组,数组元素以1来填充 |
🙌举个例子
1.numpy.empty
numpy.empty(shape, dtype = float, order = 'C')
![](https://i-blog.csdnimg.cn/blog_migrate/f016abe7f721c58cbda7cf7b05a102db.png)
2.numpy.zeros
numpy.zeros(shape, dtype = float, order = 'C')
![](https://i-blog.csdnimg.cn/blog_migrate/80bb64cdf0c0a1ea5578bb7be2a9c446.png)
3.numpy.ones
numpy.ones(shape, dtype = None, order = 'C')
![](https://i-blog.csdnimg.cn/blog_migrate/52c309c6a3c6aed4ffbfd78d61b2202b.png)
4.NumPy索引
1.索引可以类似list的切片索引。
2.整数数组索引
![](https://i-blog.csdnimg.cn/blog_migrate/760408b3e189ad3eda34d34f1e5b8e5e.png)
我们索引出的是数组中(0,0),(1,1)和(2,0)处的元素。
⏰通过观察可以发现,前边是行,后边是列。
🙌举个例子
取4x3数组中的四个角的元素
取(0,0),(0,2)(3,0)(3,2)的
行索引是[0,0]、[3,3] :第0 行、第0行、第3行、第3行
列索引是[0,2] [0,2]:第0列、第2列、第0列、第2列
![](https://i-blog.csdnimg.cn/blog_migrate/74d7306d4d0b4f691a30d6d4aa165eda.png)
5.NumPy计算
操作 | 说明 |
det(ndarray) | 计算矩阵列式 |
eig(ndarray) | 计算方阵的特征值和特征向量 |
inv(ndarray) | 计算方阵的逆 |
pinv(ndarray) | 计算矩阵的伪逆 |
qr(ndarray) | 计算qr分解 |
svd(ndarray) | 计算奇异值分解svd |
solve(ndarray) | 解线性方程组Ax=b,其中A为方阵 |
lstsq(ndarray) | 计算Axb的最小二乘解 |
5.1 张量操作
1.矩阵相加
![](https://i-blog.csdnimg.cn/blog_migrate/b967ea8069ad8e5106034c081f2ddff3.png)
2.标量与矩阵相乘
![](https://i-blog.csdnimg.cn/blog_migrate/ba72a3244c72a6fc5356b8a117ba9046.png)
3.点乘
![](https://i-blog.csdnimg.cn/blog_migrate/2a0e7cdf145f94e7f0b92aa3452ac6d9.png)