2025-03-23 吴恩达机器学习3——多维特征

文章目录

  • 1 多元引入
  • 2 矢量化
    • 2.1 示例
    • 2.2 非矢量化实现
    • 2.3 矢量化实现
    • 2.4 应用
  • 3 特征缩放
    • 3.1 举例
    • 3.2 必要性
    • 3.3 方法
      • 3.3.1 最大最小值缩放(Min-Max Scaling)
      • 3.3.2 均值归一化(Mean Normalization)
      • 3.3.3 Z 分数归一化(Z-Score Normalization)
    • 3.4 小结
  • 4 梯度下降与学习率
    • 4.1 梯度下降
    • 4.2 学习率
  • 5 特征工程
    • 5.1 示例
    • 5.2 创建特征
  • 6 多项式回归

1 多元引入

​ 在原始的线性回归模型中,我们只有一个特征 x x x(例如房屋的大小),并预测目标变量 y y y(例如房屋的价格)。模型的形式为:
f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b
​ 然而,在实际应用中,我们通常有多个特征来预测目标变量。例如,

  • 房屋大小
  • 卧室数量
  • 楼层数量
  • 房屋的使用年限

​ 这些额外的特征可以提供更多的信息,帮助我们更准确地预测价格。

​ 为了处理多个特征,引入以下符号:

  • X 1 X_1 X1, X 2 X_2 X2, X 3 X_3 X3, X 4 X_4 X4 分别表示四个特征(例如房屋大小、卧室数量、楼层数量、房屋使用年限)。
  • X j X_j Xj 表示第 j j j 个特征,其中 j j j 从 1 到 4。
  • n n n 表示特征的总数,在这个例子中 n = 4 n=4 n=4
  • X ( i ) X^{(i)} X(i)表示第 i i i 个训练示例的特征向量,例如 X ( 2 ) = [ 1416 , 3 , 2 , 40 ] X^{(2)} = [1416, 3, 2, 40] X(2)=[1416,3,2,40]
  • X j ( i ) X_j^{(i)} Xj(i) 表示第 i i i 个训练示例的第 j j j 个特征的值,例如 X 3 ( 2 ) = 2 X_3^{(2)}=2 X3(2)=2(表示第二个训练示例的楼层数量)。
image-20250323122207801

​ 此时,线性回归模型的形式变为:
f w , b ( X ) = w 1 X 1 + w 2 X 2 + w 3 X 3 + w 4 X 4 + b f_{w,b}(X)=w_1X_1+w_2X_2+w_3X_3+w_4X_4+b fw,b(X)=w1X1+w2X2+w3X3+w4X4+b
​ 例如,一个可能的房价预测模型可能是:
f w , b ( X ) = 0.1 X 1 + 4 X 2 + 10 X 3 − 2 X 4 + 80 f_{w,b}(X)=0.1X_1+4X_2+10X_3-2X_4+80 fw,b(X)=0.1X1+4X2+10X32X4+80

  • b = 80 b=80 b=80 表示房屋的基本价格为 80,000 美元(假设没有大小、卧室、楼层和年龄)。
  • w 1 = 0.1 w1=0.1 w1=0.1 表示每增加一平方英尺,价格增加 100 美元。
  • w 2 = 4 w2=4 w2=4 表示每增加一个卧室,价格增加 4,000 美元。
  • w 3 = 10 w3=10 w3=10 表示每增加一层,价格增加 10,000 美元。
  • w 4 = − 2 w4=−2 w4=2 表示每增加一年房屋使用年限,价格减少 2,000 美元。
image-20250323122524158

​ 为了简化表示,我们可以将参数 w w w 和特征 X X X 表示为向量:
w ⃗ = [ w 1 , w 2 , ⋯ , w n ] X ⃗ = [ X 1 , X 2 , ⋯ , X n ] \vec{w}=[w_1,w_2,\cdots,w_n]\\ \vec{X}=[X_1,X_2,\cdots,X_n] w =[w1,w2,,wn]X =[X1,X2,,Xn]
​ 因此,模型可表示为:
f w , b ( X ) = w ⃗ ⋅ X ⃗ + b f_{w,b}(X)=\vec{w}\cdot\vec{X}+b fw,b(X)=w X +b
​ 这里的点积是两个向量的对应元素相乘后求和的结果:
w ⃗ ⋅ X ⃗ = w 1 X 1 + w 2 X 2 + ⋯ + w n X n \vec{w}\cdot\vec{X}=w_1X_1+w_2X_2+\cdots+w_nX_n w X =w1X1+w2X2++wnXn
image-20250323122822263

2 矢量化

​ 矢量化是一种将操作应用于整个向量或矩阵的技术,而不是逐个元素进行处理。在机器学习中,矢量化可以极大地提高代码的效率,尤其是在处理大规模数据集时。

​ 矢量化不仅可以缩短代码,还能显著提高算法的运行效率。通过编写矢量化代码,您可以利用现代数值线性代数库(如 NumPy)以及 GPU(图形处理单元)硬件,从而加速计算过程。

2.1 示例

​ 假设我们有一个线性回归模型,参数为 w w w b b b,其中 w w w 是一个包含三个数字的向量,特征向量 x x x 也包含三个数字。这里 n = 3 n=3 n=3

import numpy as npw = np.array([1.0, 2.5, -3.3])  # 参数向量
x = np.array([10, 20, 30])  # 特征向量
b = 4  # 偏置项

​ 在 Python 中,数组的索引从 0 开始,因此:

  • w [ 0 ] w[0] w[0] 对应 w 1 w_1 w1
  • w [ 1 ] w[1] w[1] 对应 w 2 w_2 w2
  • w [ 2 ] w[2] w[2] 对应 w 3 w_3 w3
image-20250323124435323

2.2 非矢量化实现

方法 1:逐个元素计算

f = w[0] * x[0] + w[1] * x[1] + w[2] * x[2] + b

​ 这种方法在 n n n 较小时可行,但当 n n n 很大时(例如 100 或 100,000),代码会变得冗长且效率低下。

方法 2:使用 for 循环

f = 0
for j in range(3):f += w[j] * x[j]
f += b

​ 虽然这种方法比逐个元素计算更简洁,但仍然没有利用矢量化,效率不高。

​ 这种实现方式会顺序执行计算,即先计算索引 0 的值,然后是索引 1,索引 2。这种方式效率较低,尤其是在 n n n 很大时。

2.3 矢量化实现

​ 使用 NumPy 的 dot 函数,可以将模型的计算简化为一行代码:

f = np.dot(w, x) + b
  • np.dot(w, x) 计算向量 w w w x x x 的点积。
  • 点积的定义为: w ⃗ ⋅ x ⃗ = w 1 x 1 + w 2 x 2 + ⋯ + w n x n \vec{w}\cdot\vec{x}=w_1x_1+w_2x_2+\cdots+w_nx_n w x =w1x1+w2x2++wnxn

矢量化的优势

  1. 代码更简洁

    矢量化将复杂的计算简化为一行代码,使代码更易读、更易维护。

  2. 运行效率更高

    矢量化利用现代计算机的并行计算能力,尤其是在使用 GPU 时,可以显著加速计算过程。

底层原理

  • NumPy 的 dot 函数能够在计算机中使用并行硬件(如 CPU 或 GPU),从而比 for 循环或逐个元素计算更高效。
  • n n n 很大时,矢量化实现的效率优势尤为明显。

2.4 应用

​ 假设我们有一个多元线性回归模型,包含 16 个特征和 16 个参数 w 1 w_1 w1 w 16 w_{16} w16。我们需要更新这些参数,公式为:
w j = w j − α ⋅ d j w_j=w_j-\alpha\cdot d_j wj=wjαdj
其中 α α α 是学习率, d j d _ j dj 是导数项。

非矢量化实现

for j in range(16):w[j] = w[j] - 0.1 * d[j]

​ 这种实现方式会逐个更新每个参数,效率较低。

矢量化实现

w = w - 0.1 * d

​ 在矢量化实现中,计算机可以同时更新所有 16 个参数,利用并行硬件高效完成计算。

image-20250323125114820

3 特征缩放

3.1 举例

​ 假设我们有两个特征:

  • x 1 x_ 1 x1:房屋的大小(范围:300 到 2000 平方英尺)
  • $ x_2$:卧室的数量(范围:0 到 5)

​ 我们使用这两个特征来预测房屋的价格。假设一个房屋的面积为 2000 平方英尺,有 5 间卧室,价格为 500,000 美元。

  1. 参数示例 1

    • w 1 = 50 , w 2 = 0.1 , b = 50 w_1=50, w_2=0.1, b =50 w1=50,w2=0.1,b=50

    • 预测价格:50×2000+0.1×5+50=100,000+0.5+50=100,050.5 千美元

    • 这个预测与实际价格 500,000 美元相差甚远。

  2. 参数示例 2

    • w 1 = 0.1 , w 2 = 50 , b = 50 w _1=0.1, w_2=50, b =50 w1=0.1,w2=50,b=50

    • 预测价格:0.1×2000+50×5+50=200+250+50=500 千美元

    • 这个预测与实际价格 500,000 美元一致。

image-20250323125656329

结论

  • 当特征的值范围较大时(如房屋大小),对应的参数 w 1 w_1 w1 应该较小。
  • 当特征的值范围较小时(如卧室数量),对应的参数 w 2 w_2 w2 应该较大。

3.2 必要性

​ 如果特征的值范围差异很大,梯度下降可能会在等高线图中来回弹跳,导致收敛速度变慢。例如:

  • x 1 x_1 x1 的范围较大,导致 w 1 w_1 w1 的微小变化对成本函数 J J J 的影响较大。
  • x 2 x_2 x2 的范围较小,导致 w 2 w_2 w2 的较大变化对成本函数 J J J 的影响较小。

​ 这种情况下,等高线图会呈现高瘦的椭圆形,梯度下降需要更长时间才能找到全局最小值。

image-20250323125945872

​ 特征缩放通过将不同特征的值范围调整到相似的水平,使等高线图更接近圆形,从而优化梯度下降的路径。具体来说:

  • x 1 x_1 x1 x 2 x_2 x2 的值范围都调整到 0 到 1 之间。
  • 这样,梯度下降可以更直接地找到全局最小值。
image-20250323130051463

3.3 方法

3.3.1 最大最小值缩放(Min-Max Scaling)

​ 将特征值缩放到 [ 0 , 1 ] [0,1] [0,1] 区间,公式为:
x s c a l e d = x − x min ⁡ x max ⁡ − x min ⁡ x_{\mathrm{scaled}}=\frac{x-x_{\min}}{x_{\max}-x_{\min}} xscaled=xmaxxminxxmin

  • 特征 x 1 x_1 x1 的范围为 300 到 2000。

    x 1 , s c a l e d = x 1 − 300 2000 − 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-300}{2000-300} x1,scaled=2000300x1300

  • 特征 x 2 x_2 x2 的范围为 0 到 5:

    x 2 , s c a l e d = x 2 5 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2}{5} x2,scaled=5x2

3.3.2 均值归一化(Mean Normalization)

​ 将特征值调整到以 0 为中心,公式为:
x s c a l e d = x − μ x max ⁡ − x min ⁡ x_{\mathrm{scaled}}=\frac{x-\mu}{x_{\max}-x_{\min}} xscaled=xmaxxminxμ

  • 特征 x 1 x_1 x1 的均值为 600: x 1 , s c a l e d = x 1 − 600 2000 − 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{2000-300} x1,scaled=2000300x1600
    缩放后的范围为 -0.18 到 0.82。
  • 特征 x 2 x_2 x2 的均值为 2.3: x 2 , s c a l e d = x 2 − 2.3 5 − 0 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{5-0} x2,scaled=50x22.3
    缩放后的范围为 -0.46 到 0.54。
image-20250323161919636

3.3.3 Z 分数归一化(Z-Score Normalization)

​ 将特征值调整到均值为 0,标准差为 1,公式为:
x s c a l e d = x − μ σ x_{\mathrm{scaled}}=\frac{x-\mu}{\sigma} xscaled=σxμ

  • 特征 x 1 x_1 x1 的均值为 600,标准差为 450: x 1 , s c a l e d = x 1 − 600 450 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{450} x1,scaled=450x1600
    缩放后的范围为 -0.67 到 3.1。
  • 特征 x 2 x_2 x2 的均值为 2.3,标准差为 1.4: x 2 , s c a l e d = x 2 − 2.3 1.4 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{1.4} x2,scaled=1.4x22.3
    缩放后的范围为 -1.6 到 1.9。
image-20250323162138121

3.4 小结

目标范围

​ 通常将特征值调整到 -1 到 1 之间,但 -3 到 3 或 -0.3 到 0.3 也是可接受的。

特殊情况

  • 如果特征值范围非常大(如 -100 到 100),建议进行缩放。
  • 如果特征值范围非常小(如 -0.001 到 0.001),也可以考虑缩放。
  • 如果特征值范围适中(如 0 到 3 或 -2 到 0.5),不缩放通常也没有问题。
image-20250323162304136

4 梯度下降与学习率

4.1 梯度下降

​ 梯度下降的目标是通过迭代更新参数 w w w b b b,以最小化成本函数 J J J。其更新规则为:
{ w = w − α ∂ J ∂ w b = b − α ∂ J ∂ b \left\{ \begin{aligned} & w=w-\alpha\frac{\partial J}{\partial w} \\ & b=b-\alpha\frac{\partial J}{\partial b} \end{aligned} \right. w=wαwJb=bαbJ
​ 其中, α α α 是学习率。

判断梯度下降是否收敛的方法

  1. 绘制学习曲线

    • 学习曲线:在每次梯度下降迭代后,计算并绘制成本函数 J J J 的值。横轴是迭代次数,纵轴是成本 J J J

    • 正常情况:如果梯度下降正常运行,成本 J J J 应该在每次迭代后逐渐减小。

    • 异常情况:如果 J J J 在某次迭代后增加,可能意味着学习率 α α α 过大,或者代码中存在错误。

    • 收敛判断:当学习曲线趋于平稳(即 J J J 不再显著下降)时,可以认为梯度下降已经收敛。

    示例:

    • 在 100 次迭代后, J J J 的值为某个点。

    • 在 200 次迭代后, J J J 的值进一步减小。

    • 在 300 次迭代后, J J J 的值趋于平稳,表明梯度下降已收敛。

  2. 自动收敛测试

    • 定义:设置一个阈值 ϵ ϵ ϵ(例如 0.001),如果成本 J J J 在一次迭代中减少的幅度小于 ϵ ϵ ϵ,则认为梯度下降已收敛。

    • 优点:自动化判断,无需手动绘制学习曲线。

    • 缺点:选择合适的阈值 ϵ ϵ ϵ 可能比较困难。

image-20250323162418504
  • 不同应用程序中,梯度下降收敛所需的迭代次数可能差异很大。某些模型可能在 30 次迭代后收敛,而其他模型可能需要 1,000 或 100,000 次迭代。

  • 很难提前预测梯度下降需要多少次迭代才能收敛,因此绘制学习曲线是一种有效的方法。

4.2 学习率

​ 选择合适的学习率 α α α 是优化梯度下降算法的关键。如果学习率太小,梯度下降会收敛得很慢;如果学习率太大,梯度下降可能无法收敛,甚至发散。在本视频中,我们将探讨如何为模型选择一个合适的学习率。

  • 学习率太小:梯度下降收敛速度很慢,需要大量迭代才能达到最小值。
  • 学习率太大:梯度下降可能无法收敛,甚至导致成本函数 J J J 在每次迭代后增加。

示例

  • 如果学习率太大,更新步骤可能会“跳过”最小值,导致成本函数 J J J 在每次迭代后波动或增加。
  • 如果学习率太小,更新步骤会非常小,导致收敛速度缓慢。
image-20250323163235805

选择学习率的策略

  • 尝试一系列值

    从较小的学习率开始,逐步增加,观察成本 J J J 的变化。

    • 例如,尝试 α = 0.001 , 0.003 , 0.01 , 0.03 , 0.1 α =0.001,0.003,0.01,0.03,0.1 α=0.001,0.003,0.01,0.03,0.1 等。
    • 对于每个 α α α,运行少量迭代,绘制成本 J J J 随迭代次数的变化。
  • 选择合适的学习率

    • 选择使成本 J J J 快速且持续下降的最大可能学习率。
    • 避免选择过大的学习率,以免导致发散。

实践建议

  • 初始尝试:从 α = 0.001 α =0.001 α=0.001 开始,逐步增加(例如每次增加 3 倍)。
  • 观察曲线:绘制成本 J J J 随迭代次数的变化,选择使 J J J 快速下降的 α α α
  • 避免过大:确保学习率不会导致成本 J J J 增加或波动。
image-20250323163417374

5 特征工程

5.1 示例

​ 假设我们有以下两个特征来预测房屋价格:

  • x 1 x_1 x1:地块的宽度(临街面)
  • x 2 x_2 x2:地块的深度

​ 初始模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + b f_{w,b}(X)=w_1x_1+w_2x_2+b fw,b(X)=w1x1+w2x2+b
​ 虽然这个模型可以正常工作,但可能不是最有效的。我们可以通过特征工程来改进模型。

5.2 创建特征

​ 地块的面积(宽度 × 深度)可能比单独的宽度和深度更能预测房屋价格。因此,可以定义一个新特征:
x 3 = x 1 × x 2 x_3=x_1\times x_2 x3=x1×x2
​ 改进后的模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + b f_{w,b}(X)=w_1x_1+w_2x_2+w_3x_3+b fw,b(X)=w1x1+w2x2+w3x3+b
image-20250323163659119

  • 通过转换或组合原始特征,可以创建新的、更有意义的特征。
  • 特征工程不仅可以帮助拟合直线,还可以拟合曲线和非线性函数,从而更好地拟合数据。

6 多项式回归

​ 结合多元线性回归特征工程的思想,提出一种称为多项式回归的新算法,可以将曲线和非线性函数拟合到数据中。

​ 假设我们有一个房屋数据集,其中特征 x x x 是房屋的大小(以平方英尺为单位)。数据分布可能不适合用直线拟合,而是更适合用曲线拟合。

image-20250323164323628

​ 多项式回归通过将原始特征 x x x 提升为不同的幂次(如 x 2 , x 3 x_2,x_3 x2,x3)来创建新的特征。例如:

  • 第一个特征: x x x(房屋大小)
  • 第二个特征: x 2 x_2 x2(房屋大小的平方)
  • 第三个特征: x 3 x_3 x3(房屋大小的立方)
image-20250323164544315

二次函数

  • 模型 f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+b fw,b(X)=w1x1+w2x22+b
  • 优点:可以拟合数据的二次曲线。
  • 问题:二次函数最终会下降,这与房价随面积增加而上升的预期不符。

三次函数

  • 模型 f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + w 3 x 3 3 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+w_3x_3^3+b fw,b(X)=w1x1+w2x22+w3x33+b
  • 优点:可以拟合更复杂的曲线,更好地适应数据。
  • 特点:随着面积的增加,曲线最终会恢复上升,符合房价的预期。

特征缩放的必要性

​ 如果房屋大小的范围是 1 到 1,000 平方英尺,那么 x 2 x_2 x2 的范围是 1 到 1,000,000, x 3 x_3 x3 的范围是 1 到 1,000,000,000。这些特征的值范围差异很大,因此在应用梯度下降时,特征缩放变得尤为重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正点原子内存管理学习和修改

由于项目需要用到内存管理进行动态申请和释放,今天又重新学习了一下正点原子的内存管理实验,温习了一下内存管理的实质。首先先上正点原子内存管理的源代码: malloc.c文件: #include "./MALLOC/malloc.h"#if !(__ARMC…

时空观测者:俯身拾贝

目录 中华文明时空贝壳集(按时间排序)1. 良渚玉琮(约公元前3300-2300年)2. 三星堆青铜神树(公元前1200年)3. 殷墟甲骨文(约公元前14世纪)4. 京杭大运河(公元前486年始建&…

护网期间监测工作全解析:内容与应对策略

护网期间监测工作全解析:内容与应对策略 一、引言 在数字化浪潮中,网络安全的重要性愈发凸显,护网行动作为保障关键信息基础设施安全的关键举措,备受瞩目。护网期间,监测工作是发现潜在威胁、防范攻击的重要防线。全…

【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 5.zabbix监控HCL模拟网络设备 在保证zabbix-server与HCL网络相通的情况下进行如下操作。 5.1创建主机群 配置-主机群-创建主机群 图 19 取名,添加。 图 20 5.2 创建监控…

趣味极简品牌海报艺术贴纸设计圆润边缘无衬线粗体装饰字体 Chunko Bold - Sans Serif Font

Chunko Bold 是一种功能强大的显示字体,体现了大胆极简主义的原则 – 当代设计的主流趋势。这种自信的字体将粗犷的几何形状与现代的趣味性相结合,具有圆润的边缘和强烈的存在感,与当今的极简主义设计方法完美契合。无论是用于鲜明的构图还是…

Spring Boot(十七):集成和使用Redis

Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Spring Boot 中集成和使用Redis主要涉及以下几个步骤: 添加依赖 在项目的pom.xml文件中添加Redis的依赖。Spring Boot提供了对Redis的集…

2025-03-21 Unity 序列化 —— 自定义2进制序列化

文章目录 前言1 项目结构1.1 整体1.2 代码 2 实现2.1 Processor2.1.1 BaseType2.1.2 CollectionType2.1.3 CustomType 2.2 ByteFormatter2.3 ByteHelper 3 使用 前言 ​ BinaryFormatter 类可以将 C# 类对象快速转换为字节数组数据。 ​ 在网络开发时,不会使用 Bi…

为WordPress自定义一个留言板

要在WordPress中创建一个留言反馈表单,并实现后台管理功能,您可以按照以下步骤进行操作: 1. 创建留言反馈表单 首先,您需要使用一个表单插件来创建表单。推荐使用 Contact Form 7 或 WPForms。以下是使用 Contact Form 7 的示例…

嵌入式项目:利用心知天气获取天气数据实验方案

【实验目的】 1、利用心知天气服务器获取指定位置天气数据 2、将天气数据解析并可视化显示到OLED屏幕 【实验原理】 【实验步骤】 官网注册

go-zero学习笔记

内容不多,只有部分笔记,剩下的没有继续学下去,包括路由与处理器、日志中间件、请求上下文 文章目录 1、go-zero核心库1.1 路由与处理器1.2 日志中间件1.3 请求上下文 1、go-zero核心库 1.1 路由与处理器 package mainimport ("github…

【Go】Go语言继承-多态模拟

继承(结构体嵌入)多态(接口实现和空接口) 1. 继承(结构体嵌入) Go 语言没有传统的面向对象的继承机制,但可以通过“结构体嵌入”实现类似继承的效果。 结构体嵌入:在结构体中嵌入另…

kotlin知识体系(四) : inline、noinline、crossinline 关键字对应编译后的代码是怎样的 ?

kotlin中inline、noinline、crossinline 关键字的作用 在 Kotlin 里,inline、noinline 和 crossinline 这几个关键字和高阶函数紧密相关,它们能够对高阶函数的行为进行优化和控制。下面为你详细阐述它们的作用和原理。 inline 关键字 inline 关键字用…

LabVIEW FPGA与Windows平台数据滤波处理对比

LabVIEW在FPGA和Windows平台均可实现数据滤波处理,但两者的底层架构、资源限制、实时性及应用场景差异显著。FPGA侧重硬件级并行处理,适用于高实时性场景;Windows依赖软件算法,适合复杂数据处理与可视化。本文结合具体案例&#x…

深度解析 Android Matrix 变换(二):组合变换 pre、post

前言 在上一篇文章中,我们讲解了 Canvas 中单个变换的原理和效果,即缩放、旋转和平移。但是单个旋转仅仅是基础,Canvas 变换最重要的是能够随意组合各种变换以实现想要的效果。在这种情况下,就需要了解如何组合变换,以…

Java并发编程之CountDownLatch

1. 基本原理 计数器 CountDownLatch 在创建时需要指定一个初始计数值。这个值通常代表需要等待完成的任务数或线程数。 等待与递减 等待:调用 await() 方法的线程会被阻塞,直到计数器变为 0。递减:每当一个任务完成后,应调用 cou…

C++|GLog开源库的使用 如何实现自定义类型消息日志

参考: C glog使用教程与代码演示 C第三方日志库Glog的安装与使用超详解 GLOG从入门到入门 glog 设置日志级别_glog C版本代码分析 文章目录 日志等级自定义消息创建使用宏定义 日志等级 在 glog 中,日志的严重性是通过 LogSeverity 来区分的&#xff0c…

FAQ - VMware vSphere Web 控制台中鼠标控制不了怎么办?

问题描述 在VMware vSphere vCenter Server 的 Web 控制台中新建了一台 Windows Server 2008 R2 虚拟机,但是鼠标进入控制台后,可以看见鼠标光标,但是移动却没有反应。 根因分析 暂无。 解决方案 选中虚拟机>操作>编辑设置>添加新…

Rust+WebAssembly:开启浏览器3D渲染新时代

引言 在当今的 Web 开发领域,随着用户对网页交互体验的要求日益提高,3D 渲染技术在 Web 应用中的应用愈发广泛。从沉浸式的 Web 游戏,到逼真的虚拟展示场景,3D 渲染引擎承担着将虚拟 3D 世界呈现到用户浏览器中的关键任务。其性能…

在小米AX6000中添加tailscale monitor

经过测试,发现小米路由器中的tailscale可能会因为某种原因状态异常, 为了让tailscale恢复正常,所以又写了monitor用来监控: #!/bin/sh# Define Tailscale related paths TAILSCALED_PATH"/tmp/tailscale/tailscale_1.80.3_a…

表达式括号匹配(stack)(信息学奥赛一本通-1353)

【题目描述】 假设一个表达式有英文字母(小写)、运算符(,—,∗,/)和左右小(圆)括号构成,以“ ”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号…