numpy自学笔记01

1.常量

  1. numpy.nan空值
    两个numpy.nan是不相等的
  2. numpy.inf表示无穷大
  3. numpy.pi表示圆周率
  4. 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

日期单位代码含义时间单位代码含义
Yh小时
Mm分钟
Ws
Dms毫秒
--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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值