牛客题解 | 线性核函数

题目## 题目## 题目

题目链接

线性核函数(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=0M1n=0N1I(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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值