使用 NumPy 范数计算向量和矩阵范数

2023-10-24

在线性代数中,范数是为向量空间中的每个向量分配严格正的长度或大小的函数。它是矢量大小的度量。

从数学上来说,对于一个向量x, the p-范数定义为||x||p = (sum |xi|^p)^(1/p).

在本教程中,我们将使用numpy.linalg.norm()function,这是Python中用于计算范数的关键函数。

 

 

numpy.linalg.norm() 的语法和参数

用于计算范数的函数NumPy is numpy.linalg.norm()。这是它的语法:


numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)
  

参数如下:

  • x:输入数组。它可以是向量或矩阵。
  • ord: 正常顺序。它可以是任何正数、np.inf、-np.inf、0、1 或 2.
  • axis:计算范数所沿的一个或多个轴。如果这是一个整数元组,则在多个维度上计算范数。
  • keepdims:如果设置为 True,则标准化的轴将作为尺寸为 1 的维度保留在结果中。

下面是它的使用示例:


import numpy as np

# Define a vector
vector = np.array([1, -2, 3, -4, 5])

# Compute L1 norm
l1_norm = np.linalg.norm(vector, ord=1)

print("L1 Norm: ", l1_norm)  

Output:


L1 Norm: 15.0  

在上面的代码中,我们定义了一个向量并使用以下方法计算其 L1 范数numpy.linalg.norm()。我们传递向量并且ord=1计算L1范数,结果为15.0.

 

标准化与采用规范

标准化对数据进行缩放,使其落在特定范围内,通常在 0 到 1 之间。

取向量的范数可以计算向量空间中向量的大小或长度。
下面是一个例子来说明差异:


import numpy as np
vector = np.array([1, 2, 3, 4, 5])

# Normalize the vector
normalized_vector = vector / np.linalg.norm(vector)

# Compute the l2 norm (Euclidean distance)
l2_norm = np.linalg.norm(vector)

print("Normalized Vector: ", normalized_vector)
print("L2 Norm: ", l2_norm)
  

Output:


Normalized Vector:  [0.13483997 0.26967994 0.40451992 0.53935989 0.67419986]
L2 Norm:  7.416198487095663
  

在此代码中,我们首先定义一个向量,然后通过将向量中的每个元素除以向量的 L2 范数来对其进行归一化。

我们还计算原始向量的 L2 范数。正如我们所看到的,归一化向量的数据在 0 和 1 之间重新缩放,而 L2 范数输出表示原始向量的长度或大小的单个数字。

 

向量范数的类型

有不同类型的向量范数,包括:

  1. L1范数:也称为曼哈顿距离,它是向量中元素的绝对值之和。
  2. L2范数:也称为欧氏距离,它是向量中每个元素的平方和的平方根。
  3. 无穷范数:该范数给出向量元素之间的最大绝对值。
  4. 负无穷范数:该范数给出向量元素中的最小绝对值。

让我们计算一下这些规范的每种类型。

 

L1范数(曼哈顿距离)

L1 范数也称为曼哈顿距离,计算为向量中元素的绝对值之和。

当绝对值的差异更重要时,它特别有用。以下是计算 L1 范数的方法:


import numpy as np
vector = np.array([1, -2, 3, -4, 5])

# Compute L1 norm
l1_norm = np.linalg.norm(vector, ord=1)
print("L1 Norm: ", l1_norm)
  

Output:


L1 Norm:  15.0
  

在上面的代码中,我们首先定义一个向量。然后我们使用以下方法计算向量的 L1 范数np.linalg.norm() with ord=1。结果是15.0,它是向量中元素的绝对值之和。

 

L2范数(欧几里得距离)

L2范数,也称为欧几里得距离,是向量中元素的平方和的平方根。

它通常用于测量空间中点之间的距离。以下是计算 L2 范数的方法:


import numpy as np
vector = np.array([1, -2, 3, -4, 5])

# Compute L2 norm
l2_norm = np.linalg.norm(vector, ord=2)
print("L2 Norm: ", l2_norm)
  

Output:


L2 Norm:  7.416198487095663
  

在上面的代码中,我们首先定义一个向量。然后我们使用以下方法计算向量的 L2 范数np.linalg.norm() with ord=2.

结果是7.416198487095663,它是向量中元素的平方和的平方根。

 

无穷范数(最大范数)

无穷范数,也称为最大范数,返回向量元素中的最大绝对值。

以下是计算无穷范数的方法:


import numpy as np
vector = np.array([1, -2, 3, -4, 5])

# Compute Infinity norm
infinity_norm = np.linalg.norm(vector, ord=np.inf)
print("Infinity Norm: ", infinity_norm)
  

Output:


Infinity Norm:  5.0
  

在上面的代码中,我们首先定义一个向量。然后我们使用以下方法计算向量的无穷范数np.linalg.norm() with ord=np.inf.

结果是5.0,它是向量元素中的最大绝对值。

 

负无穷范数(最小范数)

负无穷范数,也称为最小范数,返回向量元素中的最小绝对值。

以下是计算负无穷范数的方法:


import numpy as np
vector = np.array([1, -2, 3, -4, 5])

# Compute Negative Infinity norm
negative_infinity_norm = np.linalg.norm(vector, ord=-np.inf)
print("Negative Infinity Norm: ", negative_infinity_norm)
  

Output:


Negative Infinity Norm:  1.0
  

在上面的代码中,我们首先定义一个向量。然后我们使用以下方法计算向量的负无穷范数np.linalg.norm() with ord=-np.inf.

结果是1.0,它是向量元素中的最小绝对值。

 

计算其他 p 范数

除了 L1、L2、无穷大和负无穷范数之外,您还可以计算任何其他范数p-规范使用numpy.linalg.norm().

The p-范数定义为(sum |x_i|^p)^(1/p).
这是一个计算向量 3-范数的示例:


import numpy as np
vector = np.array([1, -2, 3, -4, 5])

# Compute 3-norm
p3_norm = np.linalg.norm(vector, ord=3)
print("3-Norm: ", p3_norm)
  

Output:


3-Norm:  6.082201995573399
  

在上面的代码中,我们首先定义一个向量。然后我们使用以下方法计算向量的 3-范数np.linalg.norm() with ord=3.

结果是6.082201995573399,它是向量中元素绝对值的立方和的立方根。

 

矩阵范数解释

矩阵范数是向量范数的扩展。对于矩阵,我们有几种类型的范数。最流行的是:

  1. Frobenius Norm:其元素绝对平方和的平方根,类似于向量的 L2 范数。
  2. 谱范数(2-范数):矩阵的最大奇异值(即矩阵厄米特最大特征值的平方根)。
  3. 1-范数:矩阵的最大绝对列和。
  4. ∞-范数:矩阵的最大绝对行和。

矩阵范数可以使用相同的方法计算numpy.linalg.norm()函数作为向量范数,但我们必须输入一个二维数组而不是一维数组。

让我们在下一节中计算这些矩阵范数。

 

弗罗贝尼乌斯范数

以下是计算 Frobenius 范数的方法:


import numpy as np
matrix = np.array([[1, -2, 3], [-4, 5, -6], [7, -8, 9]])

# Compute Frobenius norm
frobenius_norm = np.linalg.norm(matrix, ord='fro')
print("Frobenius Norm: ", frobenius_norm)
  

Output:


Frobenius Norm:  16.881943016134134
  

在上面的代码中,我们首先定义一个矩阵。然后我们使用以下方法计算矩阵的 Frobenius 范数np.linalg.norm() with ord='fro'.

结果是16.881943016134134,它是矩阵中元素的平方和的平方根。

 

谱范数(最大奇异值)

以下是计算谱范数的方法:


import numpy as np

# Define a matrix
matrix = np.array([[1, -2, 3], [-4, 5, -6], [7, -8, 9]])

# Compute Spectral norm
spectral_norm = np.linalg.norm(matrix, ord=2)

print("Spectral Norm: ", spectral_norm)
  

Output:


Spectral Norm:  16.84810335261421
  

在上面的代码中,我们首先定义一个矩阵。然后我们使用计算矩阵的谱范数np.linalg.norm() with ord=2.

结果是16.84810335261421,这是矩阵的最大奇异值。

 

计算其他归纳范数(1-范数、∞-范数)

以下是计算 1-范数和 Infini-范数的方法:


import numpy as np
matrix = np.array([[1, -2, 3], [-4, 5, -6], [7, -8, 9]])

# Compute 1-Norm
one_norm = np.linalg.norm(matrix, ord=1)

# Compute ∞-Norm
inf_norm = np.linalg.norm(matrix, ord=np.inf)

print("1-Norm: ", one_norm)
print("∞-Norm: ", inf_norm)  

Output:


1-Norm: 18.0
∞-Norm: 24.0  

在上面的代码中,我们首先定义一个矩阵。然后我们使用以下方法计算矩阵的 1-范数和 Infini-范数np.linalg.norm() with ord=1 and ord=np.inf分别。

1-范数结果是18.0,这是矩阵的最大绝对列和。

∞-范数结果是24.0,这是矩阵的最大绝对行和。

 

性能比较

为了比较性能,我们计算一个大向量的 L1 范数和 L2 范数并测量计算时间:


import numpy as np
import time

# Create a large vector
vector = np.random.rand(1000000)

# Compute L1 norm and measure time
start_time = time.time()
l1_norm = np.linalg.norm(vector, ord=1)
end_time = time.time()

print("L1 norm: ", l1_norm)
print("Time for L1 norm: %s seconds" % (end_time - start_time))

# Compute L2 norm and measure time
start_time = time.time()
l2_norm = np.linalg.norm(vector, ord=2)
end_time = time.time()

print("L2 norm: ", l2_norm)
print("Time for L2 norm: %s seconds" % (end_time - start_time))
  

注意:每次运行时,确切的输出都会有所不同,因为我们正在创建一个随机向量:


L1 norm: 500205.0234115845
Time for L1 norm: 0.006276130676269531 seconds
L2 norm: 577.4774120713894
Time for L2 norm: 0.00099945068359375 seconds
  

在这种情况下,计算 L2 范数比计算 L1 范数更快。

 

使用 numpy.linalg.norm() 时的常见错误

误认为默认标准: 默认情况下,numpy.linalg.norm()计算矩阵的 Frobenius 范数和向量的 2-范数(欧几里得距离)。

始终指定ord如果您想要不同的规范,请使用参数。


# Wrong usage for L1 norm
vector = np.array([1, -2, 3, -4, 5])
wrong_l1_norm = np.linalg.norm(vector) # This computes L2 norm, not L1
print("Wrong L1 Norm: ", wrong_l1_norm)

# Correct usage for L1 norm
correct_l1_norm = np.linalg.norm(vector, ord=1)
print("Correct L1 Norm: ", correct_l1_norm)
  

Output:


Wrong L1 Norm:  7.416198487095663
Correct L1 Norm:  15.0
  

将矩阵范数误认为向量范数:如果您正在处理矩阵,请确保使用矩阵范数。

例如,使用ord=1使用矩阵将计算最大绝对列和,而不是所有元素的绝对值之和。


# Wrong usage for matrix
matrix = np.array([[1, -2, 3], [-4, 5, -6], [7, -8, 9]])
wrong_l1_norm = np.linalg.norm(matrix, ord=1) # This computes max column sum, not sum of absolute values
print("Wrong L1 Norm: ", wrong_l1_norm)

# Correct usage for matrix
correct_fro_norm = np.linalg.norm(matrix, ord='fro') # Frobenius norm gives the square root of sum of squares of all elements
print("Correct Frobenius Norm: ", correct_fro_norm)
  

Output:


Wrong L1 Norm:  18.0
Correct Frobenius Norm:  16.881943016134134
  

不考虑负无穷范数:负无穷范数返回数组中的最小绝对值,而不是最小值本身。

这意味着在选择最小的数之前,负数将变为正数。


vector = np.array([1, -2, 3, -4, 5])
neg_inf_norm = np.linalg.norm(vector, ord=-np.inf)
print("Negative Infinity Norm: ", neg_inf_norm)
  

Output:


Negative Infinity Norm:  1.0
  

 

numpy.linalg.norm() 的实际应用

规范在各种现实应用中发挥着不可或缺的作用,特别是在机器学习和数据科学中。

这是我们如何使用 L2 范数的示例自然语言处理(NLP) 用于文本向量标准化。

在此示例中,我们将使用TfidfVectorizer from sklearn,它将文本转换为可用作机器学习模型输入的特征向量。


from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

# Sample corpus
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]

vectorizer = TfidfVectorizer()

# Fit and transform the corpus
X = vectorizer.fit_transform(corpus)

# Get the first document's vector
first_vector = X[0].toarray()

# Before normalization
print("Before normalization: ", first_vector)

# Compute L2 norm
l2_norm = np.linalg.norm(first_vector, ord=2)

# After normalization
normalized_vector = first_vector / l2_norm
print("After normalization: ", normalized_vector)
  

Output:


Before normalization:  [[0.         0.46979139 0.58028582 0.38408524 0.         0.
  0.38408524 0.         0.38408524]]
After normalization:  [[0.         0.46979139 0.58028582 0.38408524 0.         0.
  0.38408524 0.         0.38408524]]  

 

在上面的代码中,我们首先定义了四个文档的语料库。然后我们初始化一个TfidfVectorizer,它将原始文档集合转换为 TF-IDF 特征矩阵。

我们使用矢量化器来拟合和转换我们的语料库。然后我们选择第一个文档的向量。
在标准化之前,向量的值的范围可能很大,具体取决于文档的长度和每个单词的频率。

在计算向量的 L2 范数并通过将向量除以 L2 范数来标准化向量后,所得向量的长度(或大小)为 1。

 

进一步阅读

https://numpy.org/doc/stable/reference/ generated/numpy.linalg.norm.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NumPy 范数计算向量和矩阵范数 的相关文章

  • 数据操作 startdate enddate python pandas

    我有一个促销描述数据集 其中包含有关正在运行的各种促销活动及其开始日期 结束日期的信息 promo item start date end date Buy1 get 1 A 2015 01 08 2015 01 12 Buy1 get 1
  • 将新形状传递给“np.reshape”

    Within numpy ndarray reshape https docs scipy org doc numpy reference generated numpy ndarray reshape html the shape参数是一
  • 在 django 中构建动态表单

    我正在尝试根据存储在数据库中的字段及其定义动态构建一个表单 在我的数据库中 我定义了 1 个带有一些标签的复选框和 1 个带有一些标签的文本字段 如何根据数据库中的数据在我的视图中动态构建表单 Thanks 以下是我在 EuroDjango
  • 如何在代码中停止 autopep8 未安装消息

    我是一名新的 Python 程序员 使用 Mac 版本的 VS Code 1 45 1 创建 Django 项目 我安装了 Python 和 Django 扩展 每次我保存 Django 文件时 代码都会弹出此窗口 Formatter au
  • 可视化时间序列时标记特定日期

    我有一个包含几年数据的时间序列 例如 ts pd Series np random randn 1000 index pd date range 1 1 2000 periods 1000 ts ts cumsum ts plot 我还有两
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 通过 pyodbc 连接到 Azure SQL 数据库

    我使用 pyodbc 连接到本地 SQL 数据库 该数据库工作正常 SQLSERVERLOCAL Driver SQL Server Native Client 11 0 Server localdb v11 0 integrated se
  • 使用python同时播放两个正弦音

    我正在使用 python 来播放正弦音 音调基于计算机的内部时间 以分钟为单位 但我想根据秒同时播放一个音调 以获得和谐或双重的声音 这就是我到目前为止所拥有的 有人能指出我正确的方向吗 from struct import pack fr
  • 将图像转换为二进制流

    我的应用程序有两个方面 一方面我使用 C 来使用 Pleora 的 EBUS SDK 从相机读取帧 当第一次接收到该流时 在将缓冲区转换为图像之前 我能够一次读取 16 位流 以便对每个像素执行一些计算 即每个像素都存在一个 16 位数据块
  • 在Python中随机化列表[重复]

    这个问题在这里已经有答案了 我想知道是否有一个好方法来 震动 Python 中的项目列表 例如 1 2 3 4 5 可能会被动摇 随机化 3 1 4 2 5 任何顺序都同样可能 from random import shuffle list
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • 调试 python Web 服务

    我正在使用找到的说明here http www diveintopython net http web services user agent html 尝试检查发送到我的网络服务器的 HTTP 命令 但是 我没有看到按照教程中的建议在控制
  • 如何从列表中删除“\xe2”

    我是 python 新手 正在使用它在我的项目中使用 nltk 对从网页获得的原始数据进行单词标记后 我得到了一个包含 xe2 xe3 x98 等的列表 但是我不需要这些并想删除它们 我只是尝试过 if x in a and if a st
  • 没有名为 urllib.parse 的模块(我应该如何安装它?)

    我正在尝试在 CentOS 7 上运行 REST API 我读到 urllib parse is in Python 3 但我使用的是 Python 2 7 5 所以我不知道如何安装此模块 我安装了所有要求 但仍然无法运行该项目 当我寻找
  • 如何从 Selenium 获取元素的属性

    我正在 Python 中使用 Selenium 我想得到 val of a
  • 计算素数并附加到列表

    我最近开始尝试使用 python 解决 Euler 项目的问题 并且在尝试计算素数并将其附加到列表中时遇到了这个障碍 我编写了以下代码 但我很困惑为什么它在运行时不输出任何内容 import math primes def isPrime
  • 每行中最后一次出现 True 的索引

    我有一个二维数组 a False False False False False True True True True True True True True True True True True True True True True

随机推荐

  • 如何在 Fedora 36/35/34 上安装 TeamViewer

    团队查看器是一款功能强大的远程桌面和文件共享应用程序 适用于大多数操作系统和移动设备 为了将 TeamViewer 的使用商业化 您必须购买许可证 您可以免费使用它 仅供个人使用 Teamviewer 的 RPM 包由官方团队构建 可以安装
  • 如何更改 PHP 会话超时

    作为 Web 开发人员 了解 PHP 会话超时对于构建安全可靠的 Web 应用程序至关重要 PHP 会话是一种跨多个页面存储用户信息的方式 会话超时是指会话在过期之前保持活动状态的持续时间 在本分步指南中 我们将引导您完成更改 PHP 会话
  • 如何在 Ubuntu、Debian 和 LinuxMint 上安装 Python 3.7

    在撰写本文时 Python 3 7 系列的最新稳定版本已可供安装 本文将帮助您在 Ubuntu 和 LinuxMint 操作系统上安装 Python 3 7 9 你可以拜访here阅读有关 Python 版本的更多信息 先决条件 保持软件包
  • 如何在 Ubuntu 16.04、14.04 上安装 Nginx、PHP 7 和 MySQL

    PHP 7 2 的最新主要版本已经发布 在速度和安全性方面进行了大量优化 所以你应该尝试这个版本来进行开发 本教程将帮助您在 Ubuntu 17 10 16 04 和 14 04 LTS 版本上安装 Nginx PHP 7 2 和 MySQ
  • 了解 Terraform 语法和配置文件

    Terraform 由 HashiCorp 开发 是一款因其在基础设施即代码 IaC 方面的强大功能而广为人知的工具 本综合指南旨在让您深入了解 Terraform 语法 特别关注配置文件 了解 Terraform 语法 Terraform
  • Fedora 26 发布,新功能及升级步骤

    Fedora 26 发布 最终的 Fedora 26 已发布于2017 年 7 月 11 日 Fedora 26有各种软件升级 安全补丁 该版本将与 GENOME 3 24 一起发布 您可以从以下位置下载 Fedora 26 预发行版 Be
  • 如何重命名 SQL Server 数据库

    Microsoft SQL Server 为您提供了多种重命名数据库的方法 您可以使用 SQL Server Management Studio 或运行 SQL 查询来重命名数据库 在重命名数据库之前 请记住 它可能会中断使用当前数据库名称
  • 如何使用SCP命令安全传输文件

    SCP 安全复制 是一个命令行实用程序 允许您在两个位置之间安全地复制文件和目录 With scp 您可以复制文件或目录 从本地系统到远程系统 从远程系统到本地系统 在本地系统的两个远程系统之间 当传输数据时scp 文件和密码都经过加密 因
  • 如何在 CentOS 7 上安装 VMware Workstation Player

    VMware是一个成熟稳定的虚拟化解决方案 允许您在一台机器上运行多个独立的操作系统 您可以创建自己的虚拟机并评估许多软件供应商作为虚拟设备分发的软件 这些软件可从VMware 解决方案交流 本教程将指导您完成在 CentOS 7 上安装
  • 如何在 Ubuntu 18.04 上安装 Java

    Java 是世界上最流行的编程语言之一 用于构建不同类型的跨平台应用程序 本教程介绍如何在 Ubuntu 18 04 上安装各种版本的 OpenJDK 以及 Oracle Java 相同的说明适用于 Ubuntu 16 04 和任何基于 U
  • 如何在 Ubuntu 18.04 上安装 Apache Cassandra

    Apache Cassandra 是一个免费的开源 NoSQL 数据库 不存在单点故障 它提供线性可扩展性和高可用性 而不会影响性能 Apache Cassandra 被许多组织使用 包括 Apple NetFlix eBay 和 Easo
  • Linux 中的超时命令

    timeout是一个命令行实用程序 它运行指定的命令 并在给定时间段后终止该命令 如果该命令仍在运行 换句话说 timeout允许您运行有时间限制的命令 这timeout命令是 GNU 核心实用程序包的一部分 几乎所有 Linux 发行版上
  • 如何在 CentOS 7 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 在大多数情况下 当在虚拟机上运行 CentOS 时 不存在交换
  • 如何在 Ubuntu 18.04 上设置 Apache 虚拟主机

    在本教程中 我们将提供有关如何在 Ubuntu 18 04 上设置 Apache 虚拟主机的分步说明 Apache 虚拟主机允许您在一台计算机上运行多个网站 使用虚拟主机 您可以指定站点文档根目录 包含网站文件的目录 为每个站点创建单独的安
  • 如何在 Ubuntu 20.04 上安装和配置 VNC

    虚拟网络计算 VNC 是一种图形桌面共享系统 允许您使用键盘和鼠标远程控制另一台计算机 它是 Microsoft 的开源替代品远程桌面协议 RDP 本文介绍如何在 Ubuntu 20 04 上安装和配置 VNC 服务器 我们还将向您展示如何
  • 如何在 Ubuntu 18.04 上禁用防火墙

    Ubuntu 附带了一个名为 UFW 简单防火墙 的防火墙配置工具 UFW 是一个用户友好的前端 用于管理 iptables 防火墙规则 其主要目标是使管理防火墙规则更容易 或者顾名思义 不复杂 强烈建议保持防火墙启用 但是 在某些情况下
  • 如何在 Debian 9 上安装 Jenkins

    Jenkins是一个开源自动化服务器 提供了一种设置持续集成和持续交付 CI CD 管道的简单方法 持续集成 CI 是一种 DevOps 实践 团队成员定期将代码更改提交到版本控制存储库 然后运行自动化构建和测试 持续交付 CD 是自动构建
  • 如何在 Debian 10 上配置 MySQL (MariaDB) 主从复制

    MySQL 复制是将数据从一台数据库服务器 主服务器 复制到一台或多台服务器 从服务器 的过程 MySQL 支持多种复制拓扑 其中主 从拓扑是最著名的拓扑之一 其中一台数据库服务器充当主服务器 而一台或多台服务器充当从服务器 默认情况下 复
  • 如何在 Ubuntu 18.04 上安装 Ghost

    Ghost 是一个构建在 Node js 平台之上的现代源代码发布平台 它完全可定制且易于使用 使您可以以几乎零的学习曲线发布内容 在本教程中 我们将向您展示如何使用 Nginx 作为代理 免费的 Let s Encrypt SSL 证书
  • 使用 NumPy 范数计算向量和矩阵范数

    在线性代数中 范数是为向量空间中的每个向量分配严格正的长度或大小的函数 它是矢量大小的度量 从数学上来说 对于一个向量x the p 范数定义为 x p sum xi p 1 p 在本教程中 我们将使用numpy linalg norm f