numpy可以简单的认为是和列表类似的容器的对象(可以简单理解为多维列表,但实际要比列表复杂),里面也可以存储任意对象,它的底层是C实现的,所以比python效率要高,并且提供多种方法

1 简介(pandas会比numpy更好)

numpy:开源的python科学计算模块,用于数据快速处理;

numpy支持矩阵与数组操作,计算速度快,是Python中科学计算的基础库;

numpy优点:

1:底层使用C语言实现,计算速度快

2:numpy支持均值,累积和,方差等运算,可以直接使用;

3:numpy处理数据方式灵活,支持excel, csv等多种方式数据导入;

2 安装

方式1:pip install numpy

方式2:anaconda环境:自带numpy,不用安装

numpy官方文档: https://numpy.org/doc/ (https://numpy.org/doc/) numpy

源码: https://github.com/numpy/numpy

3 使用

3.1 导入

使用np.array()创建对象

3.2 创建ndarray

3.2.1 ndarray基本概念

np.array() = 把 Python 列表 / 元组 / 数据 → 变成 NumPy 数组(ndarray)

关键参数(只记这 4 个就够)
① object(必须传):将各种类型的数据转换为数组
你要转成数组的数据:列表、元组、数字、其他数组都行。


② dtype(指定数据类型)
③ ndmin(强制最小维度)


④ copy(是否复制数据)
默认 True = 复制一份False = 不复制,直接用原数据(尽量别乱改)

3.2.2 ndarray的轴和秩

轴(axis)::每一个线性的数组称为是一个轴

        第一个轴(axis=0):第一层数组,

        第二个轴(axis=1):数组里的数组

        依次类推;

数组中轴的拆解:最外面一层是0轴,依次往里增加

按照轴进行相应计算,需要清楚按的是哪个轴计算

3.2.3 ndarray相关属性

3.2.4 【⭐】创建ndarray对象(基本方式)

3.2.4.1 np.zeros【0数组】

传入参数用列表和元组是等价的

3.2.4.2 np.empty【空数组】

快速创建一个指定形状的数组,但不初始化值(里面是随机垃圾数)

3.2.4.3 np.ones【1数组】

3.2.4.4 np.full【任意填充数组】

创建一个指定形状,所有元素都等于你指定值的数组

如果以数组为填充值,那么填充的形状一定要适配填充值的形状,不然会报错的

zeros 和 ones 就是 full 的特例!

3.2.4.5 np.arange【NumPy 版的 range,生成一段连续数字的数组】

左闭右开:包含起点,不包含终点

  • np.arange(stop) → 0 ~ stop-1
  • np.arange(start, stop) → start ~ stop-1
  • np.arange(start, stop, step) → 按步长走
  • 左闭右开,不含终点
  • 整数用它,小数用 linspace(arange精度不太好)

3.2.4.6 np.linspace【线性数组⭐】

生成一段均匀间隔的数字数组,你直接指定要多少个数 **,它自动算步长 **

  • np.arange:你定步长,自动算个数(不包含结尾)
  • np.linspace:你定个数,自动算步长(默认个数是50)(包含结尾)

linspace 默认包含起点和终点

小数、整数都非常稳定,不会出错

\

3.2.4.7 np.zeros_like/empty_like/ones_like/full_like【仿写数组⭐】

创建和指定数组形状一样的0/1/空数组

zeros_like = 克隆数组形状 → 填 0

✅ 不用手动写 shape,更安全

以np.zeros_like为例:

3.2.5 创建ndarray对象(使用随机数np.random相关方法)

3.2.5.1 np.random:

专门给数组生成随机数的工具它生成的直接是 NumPy 数组,适合科学计算、矩阵、批量数据。

3.2.5.2 np.random.rand(shape):生成 0~1 之间均匀随机数组,给出指定维度的随机数

np.random.rand(2, 3) # 2行3列


3.2.5.3 np.random.randint(low, high, size):生成整数随机数组

np.random.randint(0, 10, size=(2,3)) # 0~9 的整数

3.2.5.4 np.random.random(size):和 rand 类似,0~1 随机数

np.random.random((2, 3))

注意与.rand()的区别,一个给的是形状,一个给的是更直接的尺寸

3.2.5.5 np.random.randn(shape):生成标准正态分布(均值0,方差1)

 3.2.5.6 np.random.uniform(low, high, size)
指定范围均匀随机小数

  3.2.5.7 np.random.normal(均值, 标准差, size):正态分布

   3.2.5.8 np.random.choice(arr, size):从数组里随机选择

    3.2.5.9 np.random.seed():固定随机种子,让结果可复现

3.2.6 【⭐】创建ndarray对象(reshape(指定的形状)方法【将数组格式重新定义】)

重置形状的数组元素的个数要与原数组一致

3.2.7 创建ndarray对象(ndarray对象转其他数据结构)

将arange格式转换为其他数据结构:列表、字符、文件等等

3.3 ndarray的数据类型

常用的有整数、浮点和字符串

例如整数:int8:8位有符号的整数,uint16:16位无符号的整数

3.3.1 查看数据类型

3.3.1.1 np.sctypeDict(将简写的数据类型转换为标准的numpy格式,查询字典)

这是一个 Python 字典(dict),长度 50,是 NumPy 内部用来管理数据类型对应关系的核心字典。

键(key):类型名字符串(如 'bool', 'int', 'float32'

值(value):真正的 NumPy 类型对象(如 numpy.bool_, numpy.int64

包含:整数、浮点数、复数、布尔、字符串、时间、对象、简写符号

使用方式:当做字典使用即可

比如:直接在创建数组时,用dtype指定即可,将指定类型标准化为numpy类型

3.3.1.2 类型转换:obj.astype(数组,转换的类型)【将当前类型转换为指定的类型】

使用:

指定时也可直接等于类型,只是可能没有那么标准

3.4 ndarray访问与修改(切片访问)

3.4.1 一维array(和列表一样  [索引]  )

3.4.2 理解numpy中的轴

实例:

二维拆解

三维拆解

3.4.3 二维array

切片:[起始索引 : 结束索引 : 步长]

3.4.4 三维array

3.4.5 多维数据取值【⭐】

注意多括号和单括号的不同

第二个实际取的是11和22

第三个实际取的是111和222

3.4.6 array修改

直接在array上修改即可

3.5 numpy计算

3.5.1 numpy广播:boardcasting

定义一个列表,想让其元素每一个都加一

这是numpy的一种广播操作:基本运算都会被应用到array的所有元素中【前提是np.array才行】

【加减乘除均可】比list要简单

3.5.2 array之间的计算

两个array之间进行运算维度一定要相同

两个array之间的运算发生在对应的元素上,这也是为什么需要维度一样(一维中是做真正的运算操作)

3.5.3 多维array计算

基本运算也是对应元素进行的

3.5.4 array之间计算注意点

①shape不同不能计算

②一维array与多维array的行相同,可以计算

③一维array与多维array的列相同,可以计算

【会将一维array按行/列广播到相同shape再对应相加,只有一维的可以扩展

3.5.5 numpy统计相关算法

主要包括:求和,均值,方差,累积和等

其他方法:

numpy模块与array对象都支持这些方法,使用方式也类似,我们来看一种即可;

这些方法参数类似,我们以sum为例: np.sum(a,axis=None,dtype=None,out=None,keepdims=,initial=)

a.sum(axis=None, dtype=None, out=None, keepdims=False)

三维的,注意按哪个轴处理的形式是什么样的

#累加和:[a[0], a[0]+a[1], a[0]+a[1]+a[2], ...]

3.6 numpy数据拼接分割

应用场景:多个数据的拼接或者拆分

3.6.1 多个array拼接

注意:在列表中可以用+进行拼接,但在array中+是一种计算

拼接方法:concatenate((a1, a2, ...), axis=0, out=None)

np.concatenate 拼接 = 沿着指定 axis 把数组 “粘起来”

  • 把多个数组 沿着 axis 方向拼接

  • 不会新增维度,只是在现有维度上延长

  • 除了拼接方向的维度,其他维度必须完全一样

二维数组(最常用)shape=(行,列)

  • axis=0 → 上下拼接(竖着粘)【按行】

  • axis=1 → 左右拼接(横着粘)【按列】

三维数组 shape=(块,行,列)

  • axis=0 → 块与块拼接(前后叠)

  • axis=1 → 行拼接(每页内上下加行)

  • axis=2 → 列拼接(每行内左右加列)

3.6.2 多个array(数组)的堆叠【使用概率较小】

注意拼接和堆叠的不同:新建一个轴,把数组叠在新轴上 → 维度 +1

np.stack(arrays, axis=0, out=None)

基本理解:arrays,沿着axis进行堆叠,类似穿起来,而不是拼接

拼接不会增加数组的维度,但是堆叠会增加一维

注意不同轴的结果

3.6.3 np.hstack和np.vstack(拼接)

它们不会新增维度,只是横着 / 竖着拼起来,等价于 concatenate 的简化版

示例:

3.6.4 numpy的分割

split方法:将制定的array按照aixs分割成制定值

np.split(ary, indices_or_sections, axis=0)

把一个数组,沿着指定的轴,切成多份。

  • concatenate 的反向操作
  • 切完维度不变
  • 不会增加维度,不会减少维度,只是拆分开

  • ary:要切的数组
  • indices_or_sections
    • 填一个数字 → 平均切成几份
    • 填一个列表 → 在第几号位置切(如 [2,5]
  • axis沿着哪个轴切
    • axis=0 → 上下切(切行)
    • axis=1 → 左右切(切列)

示例:

3.6.5 np.vsplit和np.hsplit(np.vstack和np.hstack的反操作)

vsplit沿着垂直轴切分

hsplit沿着水平轴切分

3.7 numpy其他操作

3.7.1 缺省值(nan以及其他缺省值的处理)

①概念

缺省值就是一些缺失数据,一般用nan进行表示

Nan是nunpy和pandas中用于标识缺失数据 
None是Python 中对象,不能与Nan混淆一起

示例:

②nan的判断(np.isnan(对象))

逐元素进行判断

isnan不支持包含有None的操作

3.7.2 判断和bool索引(可以获取nan的索引)

array的值都为True或者False

例如:array([[False, False],[ True, False]]) 获取所有nan值:

3.7.3 all和any的使用(真假的判断,判断有没有假数据)

①np.all(a, axis=None, out=None, )

沿着给定的axis判断是否有元素为0,为0返回False,不设置axis,判断所有元素 

(沿着给定的axis判断元素,都为真返回True,否则返回False不设置axis,判断所有元素 )

②np.any(a, axis=None, out=None, )

沿着给定的axis判断是否有元素不为0,为0返回False,不设置axis,判断所有元素

(沿着给定的axis判断元素,都为假返回False,否则返回True不设置axis,判断所有元素 )

注意:np.nan在all和any的眼中也是真的,也是数,只有0和False才会被判识为假

所以如果要判断缺失值,需要先判别缺失值为假才可以

利用条件构建布尔索引,再去符合条件的值

3.7.4 where的基本操作(⭐常用)

where(condition, [x, y]): 
如果给定x,y,满足条件condition,输出x,不满足输出y; 
如果没有x,y,返回满足条件对应的值的索引;

示例:条件赋值

示例:随机生成成绩单,判断是否及格

直接给条件值赋值有可能不正确,因为数据类型不用,但是用where可以,判别后更改值

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐