NumPy 学习笔记

NumPy reference

import numpy as np

1 维数组(1-D Array)

创建向量:

# 零向量
np.zeros(4)                 # [0. 0. 0. 0.]
np.random.random_sample(4)  # [0.13874093 0.76087955 0.17028386 0.10573206]

# Array Range
np.arange(4.)               # [0. 1. 2. 3.] 加 . 号代表浮点数
np.random.rand(4)           # [0.30553381 0.00115535 0.71271101 0.65088795]

# 自定义元素值
np.array([5,4,3,2])         # [5 4 3 2]
np.array([5.,4,3,2])        # [5. 4. 3. 2.],np 矩阵的元素类型必须相同

元素相关的运算:

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

b = -a
b = a**2

b = np.sum(a)
b = np.mean(a)
b = np.power(a, 2)

点积:

a = np.array([1, 2, 3, 4])
b = np.array([-1, 4, 3, 2])
c = np.dot(a, b)

在使用 np.dot() 函数时 NumPy 会自动利用底层硬件中的可用数据并行机制来加速计算

应用阈值:

yhat = (predictions >= 0.5).astype(int)

2 维数组(2-D Array)

习惯上建议将所有 2 维数组看成由列向量组成的矩阵。

创建矩阵:

# 零矩阵
a = np.zeros((1, 5))
# [[0. 0. 0. 0. 0.]]

a = np.zeros((2, 1))
# [[0.]
#  [0.]]

np.zeros_like(a)
# [[0.]
#  [0.]]

# 随机矩阵
np.random.random_sample((1, 1))
# [[0.44236513]]

# 自定义元素值
a = np.array([[5],
              [4],
              [3]]);
# [[5]
#  [4]
#  [3]]

矩阵操作:

a = np.arange(6).reshape(-1, 2)  # -1 表示根据另一项的值自动计算。这里相当于 (3, 2)
# [[0 1]
#  [2 3]
#  [4 5]]

a[2,0]  # 4。相当于 a[2][0]

a.T  # A 的转置

矩阵乘法:

np.matmul(a.T, a)  # 矩阵乘法
a.T @ a            # 矩阵乘法的另一种写法

np.dot(a.T, a)     # dot 也可以用来矩阵相乘
a * a              # 逐点乘(元素乘法)

np.matmul(a.T, a)np.dot(a.T, a) 的区别:

  1. 基本用法

    • 对于二维数组或矩阵,np.matmulnp.dot 的行为是相同的,都是执行标准的矩阵乘法。因此对于二维数组 a.Tanp.matmul(a.T, a)np.dot(a.T, a) 将得到相同的结果。
  2. 高维数组处理

    • np.dot 可以用于计算两个数组间的点积,对于多维数组,它会将最后一个轴与倒数第二个轴进行乘积运算,并沿其他维度进行广播。
    • np.matmul 则专门用于矩阵乘法,它只能用于二维矩阵或堆叠的二维矩阵(高维数组的后两个轴进行矩阵乘法),并不能进行更一般的点积运算。
  3. 广播规则

    • np.matmul 支持自动的维度扩展和广播,对于高维数组,它会在后两个轴进行矩阵乘法运算。
    • np.dot 不支持这种自动的维度扩展,结果的形状取决于输入数组的形状和点积规则。
a = np.arange(20).reshape(-1, 10)  # reshape 有着常量计算复杂度,性能损失很小
# [[ 0  1  2  3  4  5  6  7  8  9]
#  [10 11 12 13 14 15 16 17 18 19]]

a.sum(axis=0)  # axis = 0 表示对纵轴求和,axis = 1 表示对横轴求和

a[0, 2:7:1]  # 对第 0 行取 2 到 7 列(不包括 7)
# [2 3 4 5 6]

a[:, 2:7:1]
# [[ 2  3  4  5  6]
#  [12 13 14 15 16]]

a.flatten()
# [0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
a.squeeze()
# 去掉所有为 1 的维度
# 获取矩阵形状
m = x_train.shape[0]  # 等价于 len(x_train)

在使用 NumPy 创建向量时,最好使用 np.random.randn(5, 1) 而不是 np.random.randn(5)。前者是一个列向量,可以确保在进行运算时遵循向量运算法则;而后者是一个秩为 1 的数组,在运算时可能出现与预期不一致的行为。

常用图像处理函数

图像填充(padding):

输入图像为 \(X = (m, n_{\text{w}}, n_{\text{h}}, n_{\text{c}})\)

对图像的长和宽进行 padding = 1 的填充:

np.pad(a, ((0,0), (1,1), (1,1), (0,0)), mode='constant', constant_values = (0,0))
posted @ 2024-09-24 16:48  Undefined443  阅读(7)  评论(0编辑  收藏  举报