numpy自学笔记01

numpy自学笔记01,第1张

numpy自学笔记01

文章目录

1.常量2.数据类型

2.2创建数据类型 数据类型信息

reshapelinspace/logspace改变形状 反序分解和组合拼接重复筛选和过滤提取抽样最值index矩阵和运算

算数广播矩阵 summary

1.常量
    numpy.nan空值
    两个numpy.nan是不相等的numpy.inf表示无穷大numpy.pi表示圆周率numpy.e表示自然常数
2.数据类型

常见数据类型

类型备注说明bool_ = bool88位布尔类型int8 = byte8位整型int16 = short16位整型int32 = intc32位整型int_ = int64 = long = int0 = intp64位整型uint8 = ubyte8位无符号整型uint16 = ushort16位无符号整型uint32 = uintc32位无符号整型uint64 = uintp = uint0 = uint64位无符号整型float16 = half16位浮点型float32 = single32位浮点型float_ = float64 = double64位浮点型str_ = unicode_ = str0 = unicodeUnicode 字符串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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存