Numpy 快速上手 Quickstar

Numpy Quickstar

0. 环境介绍

环境使用 Kaggle 里免费建立的 Notebook

教程使用 B 站 一位 UP 的 10分钟学会Numpy,然后我在此基础上做了一点补充。

小技巧:当遇到函数看不懂的时候可以按 Shift+Tab 查看函数详解。

1. 导入 numpy

# 如果是在自己电脑上进行操作,没有 numpy 可以使用以下命令安装模块
# !pip install numpy
import numpy as np

2. array 的创建

2.1 np.array()

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

在这里插入图片描述

2.2 np.zeros 和 np.zeros_like()

创建一个全零矩阵:

np.zeros((3, 3))

在这里插入图片描述
创建一个指定矩阵相同形状的全零矩阵,下面的例子中 np.zeros_like(a) 就是创建一个与 a 矩阵相同形状的全零矩阵:

a = np.array([[1, 2, 3], 
              [4, 5, 6]])
np.zeros_like(a)

在这里插入图片描述

2.3 np.ones() 和 np.ones_like()

创建一个全 1 矩阵:

np.ones((3, 3))

在这里插入图片描述
创建一个指定矩阵相同形状的全 1 矩阵,下面的例子中 np.ones_like(a) 就是创建一个与 a 矩阵相同形状的全 1 矩阵,与 np.zeros_like() 的用法类似:

a = np.array([[1, 2, 3], 
              [4, 5, 6]])
np.ones_like(a)

在这里插入图片描述

2.4 np.empty() 和 np.empty_like()

不像 np.zeros()np.ones() 创建矩需要用 0 和 1 进行初始值,np.empty() 不进行初始化,因此运行起来可能要快一点;
np.empty() 创建出来的矩阵中的值是无意义的数据,每次创建的值可能不一样:

np.empty((2, 3))

在这里插入图片描述
np.empty_like() 用法和与 np.zeros_like()np.ones_like() 类似,就不赘述了。

2.5 np.full() 和 np.full_like()

np.full((3, 2), 0.5)

在这里插入图片描述
若指定的维度为一个标量,则输出 1 × 标 量 值 1\times 标量值 1× 的 array:

np.full(3, 2), np.full((3,), 2)

在这里插入图片描述

np.full_like() 用法与上面一致,不过多赘述。

2.6 np.eye()

创建一个单位矩阵:

np.eye(4)

在这里插入图片描述

2.7 np.arange()

创建一个 arrary,从 10 10 10 开始迭代,范围 [ 10 , 20 ) [10, 20) [10,20),步长为 2 2 2

np.arange(10, 20, 2)

2.8 np.linspace()

创建一个 arrary,将 [ 10 , 20 ] [10, 20] [10,20] 分成 5 5 5 个值的等差数列:

np.linspace(10, 20, 5)

在这里插入图片描述

2.9 np.logspace()

创建一个 arrary,将 [ 1 0 0 , 1 0 3 ] [10^0, 10^3] [100,103] 分成 4 4 4 个值的等比数列:

np.logspace(0, 3, 4, base=10)

在这里插入图片描述

2.10 np.diag()

若对矩阵使用,取对角线:

np.diag([[1, 2, 3], 
         [4, 5, 6],
         [7, 8, 9]])

在这里插入图片描述
若对 arrary 使用,创建 arrary 维的对角矩阵,其对角线为 arrary 中的数:

np.diag([1, 2, 3])

在这里插入图片描述

2.11 np.tri()

创建一个下三角为 1 的矩阵:

np.tri(3)

在这里插入图片描述

2.12 np.vander()

生成特定的范德蒙数组:

np.vander([1, 2, 3, 4, 5])

在这里插入图片描述

2.13 np.arange()

给定数值范围生成 array:

np.arange(12)

在这里插入图片描述

3. array 属性

3.0 用于展示的例子

a = np.array([[1, 2, 3, 4], 
              [5, 6, 7, 8],
              [9, 10,11,12]])
a

在这里插入图片描述

3.1 shape

array 的形状:

a.shape

在这里插入图片描述

3.2 size

array 的元素个数:

a.size

在这里插入图片描述

3.3 T

array 的转置:

a.T

在这里插入图片描述

3.4 real 和 imag

array 的实部和虚部(因为全是实数所以虚部都为 0):

a.real, a.imag

在这里插入图片描述

4. array 操作

4.0 用于展示的例子

a = np.array([[1, 2, 3, 4], 
              [5, 6, 7, 8],
              [9, 10,11,12]])
a

在这里插入图片描述

4.1 copy()

不用 copy(),直接使用 = 赋值后的结果:

# 直接赋值给 a_cp
a_cp = a
# 更改
a_cp[0, 0] = 99
a, a_cp

在这里插入图片描述
修改数组 a_cp,原数组 a 同时发生改变。

使用 copy() 后的结果:

a_cp = a.copy()
a_cp[0, 0] = 99
a, a_cp

在这里插入图片描述
修改数组 a_cp,原数组 a 不变。

与 pytorch 对比: pytorch 中的 tensor 变量可以使用 clone() 实现 numpy 中 copy() 相同的效果。

4.2 reshape()

改变数组的形状:

a.reshape(2, 6)

在这里插入图片描述

4.3 resize()

改变数组的形状,和 reshape() 不同,resize() 直接改变原数组,没有返回值;
reshape() 不会改变原数组,而是返回一个原数组改变形状后的的 copy()

a.resize(2, 6), a

在这里插入图片描述

4.4 flatten()

将 array 拉平为一个向量:

a, a.flatten()

在这里插入图片描述

4.5 max(), min(), mean(), var(), std()

求数组的的最大值,最小值,平均数,方差,标准差:

a.max(), a.min(), a.mean(), a.var(), a.std()

在这里插入图片描述
还可以指定维度 axis

a.max(axis=0), a.min(axis=1, keepdims=True), a.mean(axis=0), a.var(axis=1), a.std(axis=1)

在这里插入图片描述
keepdims=True 参数可以使数组保持原来的维度输出。

5. array 索引

5.0 用于展示的例子

a = np.array([[1, 2, 3, 4], 
              [5, 6, 7, 8],
              [9, 10,11,12]])
a

在这里插入图片描述

5.1 切片

想要在每个维度上取得得索引用 : 隔开,: 之前缺省为 0 0 0: 之后缺省为该维度的长度;索引 b:e 的取值范围为 [b, e)

a, a[0:3, 0:2], a[-2:,:2]

在这里插入图片描述

5.2 键对索引

a, a[1, 1], a[[1, 2], [1, 3]]

在这里插入图片描述

5.3 np.ix_()

有时候我们想取自定义列和自定义行的数据怎么办?
假设想取行索引为 1 1 1 2 2 2 ,列索引为 1 1 1 3 3 3 的数据。
通过 5.2 节可以看到 a[[1, 2], [1, 3]] 这样取值是不行的,这时候就得用 ix_() 函数:

a, a[np.ix_([1, 2], [1, 3])]

在这里插入图片描述

5.4 np.nditer()

nditer() 可以用于迭代:

print(a)

for i in a:
    print(i, end=' ')
    
print('\n')

for i in np.nditer(a):
    print(i, end=' ')
    
print('\n')

for i in np.nditer(a, order='F'):
    print(i, end=' ')

在这里插入图片描述
order='F' 参数可以定义以不同的顺序读取。

6. array 的拼接拆分

6.0 用于展示的例子

a = np.arange(12).reshape(3, 4)
b = np.arange(0, 120, 10).reshape(3, 4)
a, b

在这里插入图片描述

6.1 vstack()

v 指的是 vertical(垂直),将矩阵在垂直方向上拼接起来:

np.vstack([a, b])

在这里插入图片描述

6.2 hstack()

h 指的是 horizontal(水平),将矩阵在水平方向上拼接起来:

np.hstack([a, b])

在这里插入图片描述

6.3 stack()

在指定维度上进行拼接:

c = np.stack([a, b], axis=1)
c, c.shape

在这里插入图片描述
axis 参数用于指定在哪个维度进行堆叠,缺省为 0 0 0

6.4 vsplit()

垂直方向上拆分 array 为指定的份数:

d = np.arange(16).reshape(4, 4)
d, np.vsplit(d, 2)

在这里插入图片描述

**补充:**要注意 vsplit()hsplit()split() 的返回值是 python 的 list。

6.5 hsplit()

水平方向上拆分 array 为指定的份数:

d, np.hsplit(d, 2)

在这里插入图片描述

6.6 split()

指定维度上对 array 拆分为指定的份数:

d, np.split(d, 2, axis=1)

7. 数学和统计函数

7.1 三角函数

不限于下面这些:

np.sin(10), np.cos(10), np.tan(10)

在这里插入图片描述

7.2 数学函数

不限于下面这些:

np.exp(1), np.log(np.e), np.log2(16)

在这里插入图片描述

7.2 argmax() 和 argmin()

argmax()argmin() 分别表示沿给定维度返回最大和最小元素的索引:

t = np.array([[2, 1, 3], 
              [4, 9, 0],
              [15,8, 7]])
t, np.argmax(t, axis=1), np.argmin(t, axis=1)

在这里插入图片描述

7.3 amin() 和 amax(),max() 和 min()

amin()amax() 实现的效果与 max()min() 一样:

t, np.max(t, axis=1, keepdims=True), np.amax(t, axis=1, keepdims=True)

在这里插入图片描述

t, np.min(t, axis=1, keepdims=True), np.amin(t, axis=1, keepdims=True)

在这里插入图片描述

7.4 ptp()

计算数组中元素最大值与最小值的差(可以指定维度):

t, np.ptp(t), np.ptp(t, axis=0), np.ptp(t, axis=1)

在这里插入图片描述

7.5 percentile() 和 nanpercentile()

计算数组中的指定的分位数(可以指定维度):
指定 50 50 50 表示计算中位数:

a, np.percentile(a, 50),  np.percentile(a, 50, axis=1)

在这里插入图片描述

当数组中有 np.nan 值时使用 nanpercentile() 即可。

7.6 median(), mean(), std(), var()

median() mean(), std(), var() 分别表示计算数组的中位数,平均值,标准差,方差(都可以指定维度):

a, np.median(a), np.mean(a, axis=0), np.std(a), np.var(a, axis=1, keepdims=True)

在这里插入图片描述

7.7 average()

可以指定权重,计算数组加权平均值:

k = np.array([1, 2, 3, 4])
wts = np.array([4, 3, 2, 1])
k, np.average(k), np.average(k, weights=wts), (1*4+2*3+3*2+4*1)/(4+3+2+1)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇咔咔负负得正

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值