1.常量2.数据类型
2.2创建数据类型 数据类型信息
reshapelinspace/logspace改变形状 反序分解和组合拼接重复筛选和过滤提取抽样最值index矩阵和运算
算数广播矩阵 summary
1.常量- numpy.nan空值
两个numpy.nan是不相等的numpy.inf表示无穷大numpy.pi表示圆周率numpy.e表示自然常数
常见数据类型
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
1秒 = 1000 毫秒(milliseconds)1毫秒 = 1000 微秒(microseconds)
list一般
tuple
序列生成器
rangePython内置的整数序列生成器
arange是numpy的
在reshape的时候,目标的shape需要的元素一定要和原始的元素数量相等
reshape三维张量
开头,结尾,数量(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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)