题目## 题目## 题目
线性核函数(Linear Kernel)是一种常用的核函数,其计算公式为:
K
(
x
,
y
)
=
x
T
y
K(x, y) = x^T y
K(x,y)=xTy
其中,
x
x
x和
y
y
y是两个向量。
该算法的本质是计算两个向量的内积。
标准代码如下
def kernel_function(x1, x2):
return np.inner(x1, x2)
简单二维卷积(Simple 2D Convolution)是一种常用的卷积操作,其计算公式为:
C
(
i
,
j
)
=
∑
m
=
0
M
−
1
∑
n
=
0
N
−
1
I
(
i
+
m
,
j
+
n
)
⋅
K
(
m
,
n
)
C(i, j) = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} I(i+m, j+n) \cdot K(m, n)
C(i,j)=m=0∑M−1n=0∑N−1I(i+m,j+n)⋅K(m,n)
其中,
I
I
I是输入图像,
K
K
K是卷积核,
C
C
C是输出图像。
通俗点来说,就是将卷积核在输入图像上滑动,计算每个位置的卷积结果,从而实现图像的特征提取,利用padding和stride保证卷积核在输入图像的边缘也能进行卷积操作。
标准代码如下
def simple_conv2d(input_matrix: np.ndarray, kernel: np.ndarray, padding: int, stride: int):
input_height, input_width = input_matrix.shape
kernel_height, kernel_width = kernel.shape
padded_input = np.pad(input_matrix, ((padding, padding), (padding, padding)), mode='constant')
input_height_padded, input_width_padded = padded_input.shape
output_height = (input_height_padded - kernel_height) // stride + 1
output_width = (input_width_padded - kernel_width) // stride + 1
output_matrix = np.zeros((output_height, output_width))
for i in range(output_height):
for j in range(output_width):
region = padded_input[i*stride:i*stride + kernel_height, j*stride:j*stride + kernel_width]
output_matrix[i, j] = np.sum(region * kernel)
return output_matrix
对于给定的矩阵 A,其转置矩阵表示为 A^T。数学表达式为:
A
i
j
T
=
A
j
i
A^T_{ij} = A_{ji}
AijT=Aji
其中,
A
i
j
T
A^T_{ij}
AijT 是转置矩阵 A^T 的第 i 行第 j 列元素,
A
j
i
A_{ji}
Aji 是原矩阵 A 的第 j 行第 i 列元素。标准代码如下:
def transpose_matrix(a: List[List[Union[int, float]]]) -> List[List[Union[int, float]]]:
return [list(i) for i in zip(*a)]
当然也可以使用numpy库的.T方法简化计算
def transpose_matrix(a: List[List[Union[int, float]]]) -> List[List[Union[int, float]]]:
import numpy as np
return np.array(a).T.tolist()