【Python学习】Numpy库简单使用

这篇笔记详细介绍了Numpy库的使用,包括创建数组、数组属性与操作方法,如索引、切片、重塑、拼接、分裂。还涵盖了数组计算,如通用函数、聚合操作、广播规则,以及比较、掩码和布尔逻辑。同时讨论了花哨索引、排序以及结构化数组的概念。
摘要由CSDN通过智能技术生成

Numpy库简单使用

这篇笔记是针对numpy的简单使用,所有函数只对经常会用到的参数进行说明,今后这篇笔记也会不断在项目实践的过程中不断修改和补充内容,如果笔记中的内容出现问题,欢迎各位在评论区反映,我会及时修改的!

1.创建数组

#定义整形数组
np.array([1,4,2,5,3])

注意numpy智能定义同一类型的数据,如果数据不匹配,Numpy会向上转换
如果希望明确数组的数据类型,可以用dtype关键字:

np.array([1,2,3,4,5],dtype='float32')
#output:array([1.,2.,3.,4.,5.,],dtype='float32)

创造数组

  • np.zeros(10,dtype=int) 创建一个长度为10的数组,数组的值都是0
  • **np.ones((3,5),dtype=float) ** 创建一个3×5的浮点矩阵,矩阵的值都是1
  • np.full((3,5),3.14) 创建一个3×5的浮点型数组,数组值都是3.14
  • np.arange(0,20,2) 创建一个线性序列数组,从0开始,到20结束,步长为2(当然还是左闭右开)|结果:array([0,2,4,6,8,10,12,14,16,18])
  • np.linspace(0,1,5) 创建一个5个元素的数组,这5个数均匀地分配到0~1 结果:array([0.,0.25,0.5,0.75,1.])
  • np.random.random((3,3)) 创建一个3×3的,在0~1均匀分布的随机数组成的数组
  • np.random.normal(0,1,(3,3)) 创建一个3×3的均值为0标准差为1的正态分布的随机数组
  • np.random.randint(0,10,(3,3)) 创建一个3×3的[0,10)区间内随机整形数组
  • np.eye(3) 创建一个3×3的单位矩阵
  • np.empty(3) 创建一个由3个未初始化数组

NUMPY库中数据类型:

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

2.数组对象的属性,基本操作方法

1.Numpy数组的属性:

每个数组都至少有以下几种属性:(假设x是一个numpy定义的数组)

属性 说明
x.ndim x的维度
x.shape x每个维度的大小
x.size x数组的总大小(有几个数字就是几)
x.dtype x的数据类型
x.itemsize x每个数组元素字节大小
x.nbytes x数组总字节大小(也就是itemsize×size)

numpy.random中有种子值功能,使用示范:

import numpy as np
np.random.seed(12345)
x=np.random.randint(3,size=(2,3))#随便定义了一个2×3的数组,如果是三维就是size就是(2,2,5)这样的,一维直接传个数字就可以
x_temp=np.random.randint(3,size=(2,3))

print(x,'\n\n',x_temp)
#输出:
#[[2 1 1]
# [1 0 1]]

 #[[2 2 1]
# [2 1 1]]

2.数组的索引

跟python列表的操作几乎完全相同,大概以下几点:

print(x1)#array[(1,2,3,4,5)]
print(x1[0])#1
print(x1[-1],x1[-2])#5 4
print(x2)#array([[1,2,3],
#				[4,5,6],
#    			[7,8,9]])
print(x2[0,1])#4
print(x2[0])#array[(1,2,3)]

同样,跟列表相同,ndarray可以通过索引修改数值,但是对整形进行浮点型的修改,浮点型会被截断,以下面为例:

x1=np.array([1,2,3],dtype='int8')
x1[0]=3.14
print(x1)#array[(3,2,3)]

3.数组切片获取子数组

这里也是,和python列表操作几乎相同,需要注意的是以下几点:

切片:x[start=0:stop=总列数(维数):step=1]

step可以是负数,这个时候就是倒序,-2表示每隔2个取一次值逆序

stop是维度的大小,从1开始!!!而不是从0开始!!!这里跟取索引不一样

ndaary允许多维度裁切例如:

x1=np.array([[1,2,3],[4,5,6],[7,8,9]])
x1[:1,:3]#array([1,2,3])

4.创建数组的副本

跟python列表不一样的一点是:如果你对ndarray数组的切片部分进行修改,那么原来被切片的数组也会被更改,众所周知,python列表的切片属于浅拷贝,而ndarray的切片则是属于深拷贝,切片得到的不是副本而是数组数据的视图

那么怎么创建数组的副本呢?这里用**copy()**方法可以实现

>>> x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> x_copy=x.copy()
>>> x_copy
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> x_copy[0,0]=5
>>> print(x_copy,x)
[[5 2 3]
 [4 5 6]
 [7 8 9]] [[1 2 3]
 [4 5 6]
 [7 8 9]]

可以看到修改了x_copy,但是原来的x并没有改变

5.数组的变形reshape()

下面这个例子演示reshape()的作用:

>>> grid=np.arange(1,10).reshape((3,3))
>>> grid
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

有一点要注意的是reshape中可以传入参数-1,意思是取符合要求的任意值的意思

还有一个np.newaxis,作用是在原来的对应维度基础上再加+1,这里作简要介绍:

>>> import numpy as np
>>> b = np.array([1, 2, 3, 4, 5, 6])
>>> c = b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值