来都来了,你确定不看看,使用python中的科学计算库Numpy操作数组,你一定能学废(图文并茂版)
Numpy操作数组
- Numpy库
- Numpy库的介绍
- Numpy库的安装:
- python中数组与列表对比
- 列表:
- 数组:
- 数组的创建
- 使用array方法创建数组
- 注意:
- ndmin,dtype参数的使用
- 使用arange方法创建数组
- 使用random(随机数)方法创建数组
- 其它方式创建数组
- 数组对象的属性
- 数组的切片与索引
- 改变数组的维度
- 数组的转置
- Numpy聚合函数
Numpy库
Numpy库的介绍
- NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据 统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组 与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度,是使用c语言编写的python库!!
Numpy库的安装:
- 基本安装:
pip install numpy
- 换源安装(豆瓣的源):
pip install numpy -i https://pypi.douban.com/simple
python中数组与列表对比
列表:
- list(列表) 是 python 的内置数据类型,list 中存放的数据类型不必相同,在 list 中保存的是数据的存放的地址,即指针,并非数据本身,在内存中并不是按照顺序存储的,并且创建时并不需要指定长度!!!
- 可以高效、方便的添加,删除,修改列表中的元素
数组:
- 数组是需要使用python中Numpy库进行创建的
- 一般都为固定长度,并且在内存中时连续存储,存储的是真正的数据
- 存储的数据的数据类型必须是相同的
数组的创建
使用array方法创建数组
- numpy 模块的 array 方法可以生成多维数组。例如,如果要生成一个二维数组,需要向 array 方法传递一个列表类型的参数。每一个列表元素是一维的 ndarray 类型数组,作为二维 数组的行。另外,通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式), 也可以通过 shape[n]形式获得每一维的元素个数,其中 n 是维度,从 0 开始
- array方法参数:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
注意:
- 一般在使用numpy库时,会给numpy库起个别名np,方便后续使用
- 代码演示:
- 使用array创建一维数组
# 一般在使用numpy库时,会给numpy库起个别名np
import numpy as np# 传入列表类型
arr1 = np.array([1, 2, 3, 4])
print(arr1)
print('数组的维度:', arr1.shape)
- 使用array创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
print('数组的维度:', arr2.shape)
ndmin,dtype参数的使用
arr1 = np.array([1, 2, 3, 4], ndmin=3, dtype=float)
print(arr1)
print('数组的维度:', arr1.shape)
- 创建三维数组,且数组中的元素的数据类型都为float类型
使用arange方法创建数组
- 使用 arange 方法创建数值范围并返回 ndarray 对象,参数格式如下:
numpy.arange(start, stop, step, dtype)
参数名称 | 描述 |
---|---|
start | 起始值,默认为 0 |
stop | 终止值(不包含) |
step | 步长,默认为 1 |
dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型 |
- 使用arange方法生成0-5的数组
import numpy as nparr1 = np.arange(0, 6)
print(arr1)
print('数组的维度:', arr1.shape)
- arange方法设置起始值、终止值及步长生成数组
arr2 = np.arange(100, 120, 2)
print(arr2)
print('数组的维度:', arr2.shape)
- 起始值:100 、终止值:120、 步长:2 生成的数组中不包含终止值
- 使用arange创建二维数组
arr3 = np.array([np.arange(1, 4), np.arange(4, 7), np.arange(7, 10)])
print(arr3)
print('数组的维度:', arr3.shape)
使用random(随机数)方法创建数组
- 使用random.random生成一维数组与二维数组,该方法返回的是符合在[0.0, 1.0)范围的随机数的数组
import numpy as nparr1 = np.random.random(size=5)
arr2 = np.random.random(size=(3, 4))
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
- 数组中的元素都是大于等于0,小于1的随机数
- 使用random.randin生成一维数组与二维数组,该方法返回为在自定义某个范围的随机数组成的数组(int类型)
- 该方法有三个参数 low、high、size 三个参数。默认 high 是 None,如果只有 low,那范围就是[0,low)。如果有 high,范围就是[low,high),size为需要生成数组的维度
import numpy as nparr1 = np.random.randint(10, size=5)
arr2 = np.random.randint(5, 10, size=5)
arr3 = np.random.randint(5, 10, size=(3, 4))print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- 使用random.randn创建符合标准正太分布的随机数数组
- numpy.random.randn(d0,d1,…,dn),randn 函数返回一个或一组样本,具有标准正态分布(期望为 0,方差为 1), dn 表格每个维度,返回值为指定维度的 array(数组)
**
import numpy as nparr1 = np.random.randn(5)
arr2 = np.random.randn(2, 3)
arr3 = np.random.randn(2, 3, 4)print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- 使用random.normal方法,生成指定方差与期望的随机数组
- 参数:正太分布(高斯分布)loc:期望 scale:方差 size :维度
import numpy as nparr1 = np.random.normal(loc=2, scale=5, size=(4))
arr2 = np.random.normal(loc=2, scale=5, size=(2, 3))
arr3 = np.random.normal(loc=2, scale=5, size=(2, 3, 4))print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
其它方式创建数组
ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建:
zeros方法创建指定大小的数组,数组元素以 0 来填充
参数:numpy.zeros(shape, dtype = float, order = ‘C’)
import numpy as nparr1 = np.zeros(5)
arr2 = np.zeros(5, dtype=int)
arr3 = np.zeros((2, 3, 4), dtype=int)print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- numpy.ones 创建指定形状的数组,数组元素以 1 来填充
- 参数:numpy.ones(shape, dtype = None, order = ‘C’)
import numpy as nparr1 = np.ones(5)
arr2 = np.ones(5, dtype=int)
arr3 = np.ones((2, 3, 4), dtype=int)print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- numpy.empty 方法用来创建一个指定维度(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存中存储的值
- 参数:numpy.empty(shape, dtype = float, order = ‘C’)
参数名称 | 描述 |
---|---|
shape | 数组形状(维度) |
dtype | 数据类型 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存 中的存储元素的顺序 |
import numpy as nparr1 = np.empty(5)
arr2 = np.empty(5, dtype=int)
arr3 = np.empty((2, 3, 4), dtype=int)print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- linspace 方法用于创建一个一维数组,数组是一个等差数列构成的
- 参数如下:
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数名称 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果 endpoint参数为 true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为 50 |
endpoint | 该值为 ture 时,数列中中包含 stop 值,反之不包含,默认是 True |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示 |
dtype | ndarray 的数据类型 |
import numpy as nparr1 = np.linspace(0, 10, num=5, dtype=int)print(arr1)
print('数组的维度:', arr1.shape)
数组对象的属性
- NumPy 最重要的一个特点是其N 维数组对象 ndarray,它是一系列同类型数据的集 合,以 0 下标为开始进行集合中元素的索引。
- ndarray 对象是用于存放同类型元素的多维数组。
- ndarray 中的每个元素在内存中都有相同存储大小的区域
- ndarray 内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针
数据类型或 dtype,描述在数组中的固定大小值的格子
一个表示数组形状(shape)的元组,表示各维度大小的元组 - NumPy 的数组中比较重要 ndarray 对象属性有:
属性名 | 描述 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于多维数组,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray 元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用此属性 |
import numpy as nparr1 = np.arange(1, 13)
arr2 = arr1.reshape((2, 2, 3))
arr3 = np.random.randn(3, 4, 5)
print('ndim 属性'.center(20, '*'))
print('ndim:', arr1.ndim, arr2.ndim, arr3.ndim)
print('shape 属性'.center(20, '*'))
print('shape:', arr1.shape, arr2.shape, arr3.shape)
print('dtype 属性'.center(20, '*'))
print('dtype:', arr1.dtype, arr2.dtype, arr3.dtype)
print('size 属性'.center(20, '*'))
print('size:', arr1.size, arr2.size, arr3.size)
print('itemsize 属性'.center(20, '*')) # 一个字节是 8 位
print('itemsize:', arr1.itemsize, arr2.itemsize, arr3.itemsize)
数组的切片与索引
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作 一样
ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop 及 step 参数进行,从 原数组中切割出一个新数组
一维数组切片和索引的使用
import numpy as nparr1 = np.arange(1, 13)
arr2 = arr1[2::2]
arr3 = arr1[5:]
print(arr1)
print(arr2)
print(arr3)
- 二维数组根据索引值获取
import numpy as nparr1 = np.arange(1, 13)
arr2 = arr1.reshape(3, 4)
arr3 = arr2[2]
arr4 = arr2[1][1]
print(arr2)
print('第三行', arr3)
print('第二行第二列', arr4)
- 二维数组切片的使用
- 操作方式:[对行切片,对列切片]
import numpy as nparr1 = np.arange(1, 17).reshape(4, 4)
print(arr1)
print('第二列元素:', arr1[:, 1:2])
print('奇数行第一列:', arr1[::2, 0])
改变数组的维度
- 处理数组的一项重要工作就是改变数组的维度,包含提高数组的维度和降低数组的维 度,还包括数组的转置。Numpy 提供的大量 API 可以很轻松地完成这些数组的操作。例如, 通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。通过 ravel 方法或 flatten 方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置 Numpy 数组的 shape 属性(元组类型),通过 resize 方法也可以改变数组的维度
import numpy as nparr1 = np.arange(1, 25)
print(arr1)
print('arri的维度', arr1.shape)
print('-' * 30)# 使用reshape将一维数组变成三维数组
arr2 = arr1.reshape((2, 3, 4))
print(arr2)
print('数组arr2的维度:', arr2.shape)
print('-' * 30)
# 使用reshape将一维数组变成二维数组
arr3 = arr1.reshape(3, 8)
print(arr3)
print('数组arr3的维度:', arr3.shape)
print('-' * 30)
# 使用ravel函数将三维的arr2变成一维的数组
arr4 = np.ravel(arr2)
print(arr4)
print('数组arr3的维度:', arr4.shape)
print('-' * 30)
# 使用flatten函数将二维的arr3变成一维的数组
arr5=arr3.flatten()
print(arr5)
print('数组arr5的维度:', arr5.shape)
print('-' * 30)
数组的转置
- 使用transpose方法对数组进行转置
import numpy as nparr1 = np.arange(1, 25).reshape(4, 6)
print(arr1)
print('arri的维度', arr1.shape)
# 二维数组的转置
arr2 = np.transpose(arr1)
print(arr2)
print('数组arr2的维度:', arr2.shape)
# 三维数组的转置
arr = np.arange(1, 25).reshape((2, 3, 4))
arr3 = np.transpose(arr, [1, 0, 2])
print(arr3)
print('数组arr3的维度:', arr3.shape)
Numpy聚合函数
- NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差 和方差等。 具体如下:
函数名 | 操作说明 |
---|---|
np.sum() | 求和 |
np.prod() | 所有元素相乘 |
np.mean() | 平均值 |
np.std() | 标准差 |
np.var() | 方差 |
np.median() | 中位数 |
np.power() | 幂运算 |
np.sqrt() | 开方 |
np.min() | 最小值 |
np.max() | 最大值 |
np.argmin() | 最小值的下标 |
np.argmax() | 最大值的下标 |
np.inf | 无穷大 |
np.exp(10 | 以 e 为底的指数 |
np.log(10) | 对数 |
来都来了,你确定不看看,使用python中的科学计算库Numpy操作数组,你一定能学废(图文并茂版)相关推荐
- 大家都来鄙视吧![劳斯丹顿] — 手表中的劳斯莱斯
因为, 我看电视去了~ 其实也不能说完全是看电视去了, 因为我本来就不大爱看. 准确的说, 我看广告去了~~ 什么广告? look~~ "两克拉八心八箭要饿死多万,而偶们的八心八箭只需 ...
- 独家 | 2021,什么数据分析技能最重要?
作者:Emmett Boudreau 翻译:朱启轩 校对:和中华 本文约2800字,建议阅读8分钟. 本文主要介绍数据科学的发展趋势以及当今工作岗位所需要的数据分析技能. Image by auth ...
- AI基础:自然语言处理基础之序列模型
本文主要参考吴恩达老师的深度学习课程[1]笔记部分. 0.导语 序列模型,是自然语言处理的基础,本集讲解循环序列模型. 我正在编写AI基础系列,目前已经发布: AI 基础:简易数学入门 AI 基础:P ...
- 数据可视化之Seaborn绘图
知识结构 Seaborn简介 话不多说,我们首先来欣赏几张 Seaborn 绘制的图形,一睹为快. 是不是很酷炫?学习完Seaborn的相关内容,你也可以轻松地画出这样的图. Seaborn 是 Py ...
- 学习,教育的1000+篇文章总结
学习,教育的1000+篇文章总结 本文收集和总结了有关学习,教育的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有 ...
- python基础模型_零基础python代码策略模型实战
内容摘要 1 本文概述 本文主要介绍了python基础.爬虫.与数据库交互.调用机器学习.深度学习.NLP等.分别介绍了各个模块的安装,环境的搭建等.并且以机器学习选股为例,把各个模块连贯起来,核心代 ...
- python行业中性_【建投金工丁鲁明团队 经典回顾】:零基础python代码策略模型实战...
原标题:[建投金工丁鲁明团队 经典回顾]:零基础python代码策略模型实战 编者按 本文<零基础python代码策略模型实战>,属于大数据选股领域,报告发布时间为2018年3月8日. 内 ...
- Winograd,GEMM算法综述(CNN中高效卷积实现)(上)
高效卷积实现算法和应用综述(上) 在下一篇文章会介绍Winograd算法的应用,在ICLR,CVPR,FPGA,FCCM等机器学习和FPGA领域的定会上的 ...
- linux环境内存分配原理
Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...
最新文章
- 博士一次性最高给140万安家费!还享副教授待遇,这所高校为了引进人才!拼了...
- Tools - 一些代码阅读的方法
- Spring JDBC整合
- 关于SIM800C MINI V4.0 V4版本 5v供电模块重启问题
- HDU4622(后缀自动机)
- python 设置输入法为英文,appium+python环境下的输入法切换
- 中国计算机学科建设,计算机学科建设战略研讨会暨“十四五”规划务虚会召开...
- 仿WINDWS无限级Ajax菜单树升级1.3版(修补了严重BUG)
- Flask框架项目实例:**租房网站(一)
- firefox启动很慢 linux_Win10安装和使用Linux子系统(WSL 2)完整指南
- GTD时间管理系统入门
- CentOS 6.5 安装 java 环境
- photoshop破解
- 矩阵的谱分解 (详细推导步骤~~~特征值分解特征向量
- 【EMI测试】如何选择近场电磁干扰故障诊断的测试设备/探头
- Web版微信协议详解
- iOS APP 反编译
- 自动控制原理02 数学模型
- 【读书笔记】《云计算关键领域安全指南V4.0》(一)
- mysql在window上进行备份