文章目录
1.常量
- numpy.nan空值
两个numpy.nan是不相等的 - numpy.inf表示无穷大
- numpy.pi表示圆周率
- numpy.e表示自然常数
2.数据类型
常见数据类型
类型 | 备注 | 说明 |
---|---|---|
bool_ = bool8 | 8位 | 布尔类型 |
int8 = byte | 8位 | 整型 |
int16 = short | 16位 | 整型 |
int32 = intc | 32位 | 整型 |
int_ = int64 = long = int0 = intp | 64位 | 整型 |
uint8 = ubyte | 8位 | 无符号整型 |
uint16 = ushort | 16位 | 无符号整型 |
uint32 = uintc | 32位 | 无符号整型 |
uint64 = uintp = uint0 = uint | 64位 | 无符号整型 |
float16 = half | 16位 | 浮点型 |
float32 = single | 32位 | 浮点型 |
float_ = float64 = double | 64位 | 浮点型 |
str_ = unicode_ = str0 = unicode | Unicode 字符串 | |
datetime64 | 日期时间类型 | |
timedelta64 | 表示两个时间之间的间隔 |
2.2创建数据类型
class dtype(object):
def __init__(self,obj,align=False,copy=False):
pass
每个内建类型都有一个唯一定义它的代码
b boolean b1
i signed integer i1
,i2
,i4
,i8
import numpy as np
i
u
f
b
c complex 复数
floating-point 浮点数
m timedelta64表示两个时间的间隔
M datetime64时间日期类型
O object S(byte-)string S3长度为3 的字符串
U Unicode Unicode
V void
数据类型信息
浮点数通常是64位浮点数
等同于 np.float64
class iinfo(object):
def __init__(self,int_type):
pass
def min(self):
pass
def max(self):
pass
python 和numpy数据类型之间的区别
Python 的浮点数通常是64位浮点数,几乎等同于 np.float64
。
NumPy和Python整数类型的行为在整数溢出方面存在显着差异,与 NumPy 不同,Python 的int
是灵活的。这意味着Python整数可以扩展以容纳任何整数并且不会溢出。
时间日期和时间增量、
datetime64
日期单位 | 代码含义 | 时间单位 | 代码含义 |
---|---|---|---|
Y | 年 | h | 小时 |
M | 月 | m | 分钟 |
W | 周 | s | 秒 |
D | 天 | ms | 毫秒 |
- | - | us | 微秒 |
- | - | ns | 纳秒 |
- | - | ps | 皮秒 |
- | - | fs | 飞秒 |
- | - | as | 阿托秒 |
- 1秒 = 1000 毫秒(milliseconds)
- 1毫秒 = 1000 微秒(microseconds)
list一般
tuple
序列生成器
rangePython内置的整数序列生成器
arange是numpy的
reshape
在reshape的时候,目标的shape需要的元素一定要和原始的元素数量相等
reshape三维张量
linspace/logspace
开头,结尾,数量(base default=10)
linspace线性差值
np.linspace(0,9,10).reshape(2,3,4)
logspace对数为基准
下划线的意思
-
从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。
-
使用
arange()
创建 datetime64 数组,用于生成日期范围。
a = np.arange(‘2020-08-01’,‘2020-08-10’,dtype=np.datetime64)
print(a);
print(a.dtype)
指定上下界的均匀分布
np.random.uniform(-1,1,(2,3))
生成指定范围的
np.random.randint(0,10,(2,3))
generator 随机生成器
指定seed=42每次运行看到的结果都是一样的
generator=np.random.default_rng(42)
generator.uniform也可以指定上下界
generator.uniform(1,3,(5,6))
标准正态分布
generator.standard_normal((2,4))
高斯分布
高斯分布二
generator.normal(0,1,(3,5))
存储的时候不用写文件后缀,会自动添加
统计和属性
array
- 尺寸相关
- 最大,最小,中位,分位值
- 平均、求和、标准差
按维度 axis
计算之后保持维度keepdims=True
尺寸相关
维度、形状、数据量
arr.ndim
arr.shape
arr.size
tuple可以作为键
arr.max()
arr.max(axis=0(列))按维度最大值
np.amax(arr,axis=0)
平均值
np.average(arr)
按维度平均(列)
np.average(arr,axis=0)
一般建议使用average
np.mean(arr,axis=0)
np.sum(arr,axis=1)
按列累计求和
np.cumsum(arr,axis=0)
按行累计求和
np.cumsum(arr,axis=1)
标准差
np.std(arr)
按列求标准差
np.std(arr,axis=0)
方差
np.var(arr,axis=1)
改变形状
扩展1维度expand_dims
去除1维度squeeze
无论扩展还是缩减
多或少的shape都是1
squeeze如果指定维度。该维度shape必须为1
rng = np.random.default_rng(seed=42)
arr = rng.integers(1,100,(3,4))
arr
arr.reshape(2,2,3)
reshape成另一个形状
也可以直接变为一维向量
arr.resize((4,3))
ravel将多维数组打开
扩展一个维度
arr.shape #(4,3)
np.expand_dims(arr,1).shape #(4,1,3)
expanded = np.expand_dims(arr,axis=(1,3))
expanded.shape # (4,1,3,1)
反序
字符串
s[::-1]
数组 (同字符串)
arr[::-1] 默认是列反序
列不变,行反序
arr[::-1,:]
行不变,列反序
arr[:,::-1]
行变,列也变
arr[::-1,::-1]
转置
arr.T.shape
array.T
arr.transpose(arr)
转置方式
np.transpose(arr,reshape(1,2,2,1,3,1)).shape
axes = ((0,2,1,4)).shape
分解和组合
array的分解和组合
- 切片和索引
- 拼接
- 重复
- 分拆
重中之重是切片和索引
start:stop:step
arr[0,1] #取第0行第1个元素
arr[1:3] # 1-2行
arr[[1,3]]# 第1,3行
arr[1:3,1]#第1-2行,第1列
arr[[1,3],[0]]#第1,3行,第0列
arr[...,1]#第1列的值,所有其他维度的第1维的值(最后一个为1)
arr[:,1]
拼接
拼接:np.concatenate
np.random.default_rng(42)
np.concatenate((arr1,arr2)axis=0)#列排列 默认
np.concatenate((arr1,arr2)axis=1)#行排列
堆叠:np.stack会多一行
np.stack((arr1,arr2),axis=2)
np.dstack((arr1,arr2))
纵深按axis=2堆叠,不管它就行,我们认准stack
重复
repeat
np.repeat(arr,2,axis=0)#列重复2次
np.repeat(arr,3,axis=1)#行重复3次
np.split(arr,3)#列切成3份
筛选和过滤
- 条件筛选
- 提取(按条件)
- 抽样 (按分布)
- 最大最小 index(特殊值)
这几个内容都很重要,使用的也非常高频
arr>3
np.where(arr>50)
#返回满足条件的索引,因为是两个维度,所以会返回两组结果
np.where(arr>50)
# 返回满足条件的索引,两个维度,返回两组结果
np.where(arr>50,arr,-1)
#不满足条件的赋值,将<=50替换为-1
提取
在array中提取指定条件的值
np.extract(arr>50,arr)
唯一值,是另一种形式的提取
np.unique(arr)
抽样
我们在跑模型时常常需要使用部分数据对整个过程快速检验
可以使用np.random
生成模拟数据
rng = np.random.default_rng(42)
rng.choice(4,2,replace=False,p=[0.1,0.2,0.3,0.4])
data_size=10000
np.random.choice(data_size,50,replace=False)
rng.choice(4,2 replace=False)#不可重复(样本要足够)
最值index
rng = np.random.default_rng(42)
arr = rng.uniform(1,100,(3,4))
arr
np.argmax(arr)//返回最大值的 index
⭐np.argmax(arr,axis=0)#按列排序的最大值
np.argmin(arr,axis=1)#按行排列的最小值 index
np.argsort(arr)#默认按行排序的最小值的index
矩阵和运算
算数
arr*2 #每个元素乘以2
arr ** 2 #平方
np.sqrt(arr) #开方
np.round(np.sqrt(arr)) #四舍五入
np.floor(np.sqrt(arr)) # floor/ceil
np.mod(arr,3)#模运算
np.mod(arr,arr-5)# 还可以使用多个被除数
广播
处理不同形状的时候使用的手段,方便了使用者,计算的过程中,较小的数组会在较大的数组上进行广播
以用来适配对方的形状
a+[1,2,3,4]
#后面的被当作1行4列
a+[[1],[2],|[3]]#这样广播,后面的被当作3行1列
np.mod(a,b)#之前的取余也是可以的
矩阵
np.dot(a,b)#点乘
#ijk,lkm -> ijlm
a.dot(b)# >2的维度,只考虑最后的维度
np.matmul(a,b)#矩阵乘法考虑所有维度
# ijk,ikl ->ijl
a @ b #同上
# 点积
np.vdot(a,a)
np.sum(a*a)
# 内积
np.inner(a,a)
a.dot(a.T)
#行列式
a.linalg.det(c)
#逆矩阵
np.linalg.inc(c)
summary
创建和生成
np.linspace(start, end, nums)
rng.uniform(low, high, size)
rng.integers(low,high,size)
rng.normal(loc, scale, size)
统计和属性
arr.shape
arr.max(axis)
arr.min(axis)
np.average(arr, axis)
形状和转换
np.expand_dims(arr, axis)
np.squeeze(arr axis)
np.transpose(arr,axis)
arr.T
分解和组合
arr[start:stop:step,...]
np.concatenate((arrl, arr2), axis)
np.stack((arrl, arr2), axis)
筛选和过滤
np.where(condition, arr, replaced_val)
np.extract(condition, arr)
rng-choice(a, size, replace=False, p-probs_size_equals_a)
rng-argmax(arr, axis)
rng-argmin(arr, axis)
±*/
矩阵和计算
np.dot(a, b) == a.dot(b)
np.matmul(a, b) == a@b
np.vdot(a, b)
np.inner(a, b)
引用出处
https://github.com/datawhalechina/team-learning-program/tree/518aa9c8d5abb0d344583347f58336da68fe5b8d/IntroductionToNumpy