Python库中一维张量的范数

智能真的很好说 2024-04-11 16:01:06
了解如何在 NumPy、SciPy、Scikit-Learn、TensorFlow 和 PyTorch 中计算一维 (1D) 张量的欧几里得(范数/距离)。

在人工智能和量子计算中,向量范数的计算对于特征缩放、正则化、距离度量、收敛标准、表示量子态、确保运算的单一性、纠错以及设计量子算法和电路等任务都是必不可少的。

您将学习如何计算 NumPy、SciPy、Scikit-Learn、TensorFlow 和 PyTorch 等 Python 库中一维 (1D) 张量的欧几里得(范数/距离),也称为 L2 范数。

了解标准与距离

在开始之前,让我们了解欧几里得范数与欧几里得距离之间的区别。

范数是向量到原点 (0,0) 的距离/长度/大小。距离是两个向量之间的距离/长度/大小。先决条件安装 Jupyter。在 Jupyter Notebook 中运行以下代码以安装必备组件。# Install the prerequisites for you to run the notebookbr!pip install numpybr!pip install scipybr%pip install torchbr!pip install tensorflow

您将使用 Jupyter Notebook 运行 Python 代码单元,以计算不同 Python 库中的 L2 范数。

让我们开始吧

现在,您已经在计算机上设置了 Jupyter 并安装了所需的 Python 库,让我们开始使用 NumPy 定义一维张量。

NumPy的

NumPy 是一个用于科学计算的 Python 库。NumPy 提供多维数组和其他派生对象。

张量等级

# Define a single dimensional (1D) tensor brimport numpy as npbrbrvector1 = np.array([3,7]) #np.random.randint(1,5,2)brvector2 = np.array([5,2]) #np.random.randint(1,5,2)brprint("Vector 1:",vector1)brprint("Vector 2:",vector2)brprint(f"shape & size of Vector1 & Vector2:", vector1.shape, vector1.size)

打印矢量

Vector 1: [3 7]brVector 2: [5 2]brshape & size of Vector1 & Vector2: (2,) 2Matplotlib的

Matplotlib 是一个 Python 可视化库,用于创建静态、动画和交互式可视化。您将使用 Matplotlib 来绘制向量。quiver

# Draw the vectors using MatplotLibbrimport matplotlib.pyplot as pltbr%matplotlib inlinebrbrorigin = np.array([0,0])brplt.quiver(*origin, vector1[0],vector1[1], angles='xy', color='r', scale_units='xy', scale=1)brplt.quiver(*origin, vector2[0],vector2[1], angles='xy', color='b', scale_units='xy', scale=1)brplt.plot([vector1[0],vector2[0]], [vector1[1],vector2[1]], 'go', linestyle="--")brplt.title('Vector Representation') brbrplt.xlim([0,10])brplt.ylim([0,10])brbrplt.grid() brplt.show()

使用 Matplolib 的向量表示

# L2 (Euclidean) norm of a vectorbr# NumPybrnorm1 = np.linalg.norm(vector1, ord=2)brprint("The magnitude / distance from the origin",norm1)brbrnorm2 = np.linalg.norm(vector2, ord=2)brprint("The magnitude / distance from the origin",norm2)

在 Jupyter Notebook 中运行此内容后,输出:

The magnitude / distance from the origin 7.615773105863909brThe magnitude / distance from the origin 5.385164807134504科学派

SciPy 建立在 NumPy 之上,用于数学计算。如果你观察一下,SciPy 使用与 NumPy 相同的函数。linalg

# SciPybrimport scipy brnorm_vector1 = scipy.linalg.norm(vector1, ord=2)brprint("L2 norm in scipy for vector1:", norm_vector1)brbrnorm_vector2 = scipy.linalg.norm(vector2, ord=2)brprint("L2 norm in scipy for vector2:", norm_vector2)输出:L2 norm in scipy for vector1: 7.615773105863909brL2 norm in scipy for vector2: 5.385164807134504Scikit-学习

正如 Scikit-learn 文档所说:

Scikit-learn是一个开源机器学习库,支持监督式和无监督式学习。它还为模型拟合、数据预处理、模型选择、模型评估和许多其他实用程序提供了各种工具。

我们按照预期向量是二维的来重塑向量。Scikit-learn

# Sklearnbrfrom sklearn.metrics.pairwise import euclidean_distancesbrvector1_reshape = vector1.reshape(1,-1)br## Scikit-learn expects the vector to be 2-Dimensionalbreuclidean_distances(vector1_reshape, [[0, 0]])[0,0]输出7.615773105863909张量流

TensorFlow 是一个端到端机器学习平台。

# TensorFlowbrimport osbros.environ['TF_CPP_MIN_LOG_LEVEL'] = '1' brbrimport tensorflow as tfbrprint("TensorFlow version:", tf.__version__)brbr## Tensorflow expects Tensor of types float32, float64, complex64, complex128brvector1_tf = vector1.astype(np.float64)brtf_norm = tf.norm(vector1_tf, ord=2)brprint("Euclidean(l2) norm in TensorFlow:",tf_norm.numpy())输出

输出打印 TensorFlow 的版本和 L2 范数:

TensorFlow version: 2.15.0brEuclidean(l2) norm in TensorFlow: 7.615773105863909PyTorch的

PyTorch 是一个优化的张量库,用于使用 GPU 和 CPU 进行深度学习。

# PyTorchbrimport torchbrprint("PyTorch version:", torch.__version__)brbrnorm_torch = torch.linalg.norm(torch.from_numpy(vector1_tf), ord=2)brnorm_torch.item()

输出打印 PyTorch 版本和规范:

PyTorch version: 2.1.2brbr7.615773105863909欧几里得距离

欧几里得距离的计算方式与范数相同,只不过在将差值 - 传递给相应的库之前计算向量之间的差值。vector_diff

# Euclidean distance between the vectorsbrimport mathbrvector_diff = vector1 - vector2brbr# Using normbreuclidean_distance = np.linalg.norm(vector_diff, ord=2)brprint(euclidean_distance)brbr# Using dot productbrnorm_dot = math.sqrt(np.dot(vector_diff.T,vector_diff))brprint(norm_dot)输出

使用 NumPy 库的 norm 和 dot 函数输出:

5.385164807134504br5.385164807134504

# SciPybrfrom scipy.spatial import distancebrdistance.euclidean(vector1,vector2)使用 SciPy 输出5.385164807134504

GitHub 存储库上提供了带有输出的 Jupyter Notebook。您可以按照 GitHub 存储库中的说明在 Colab 上运行 Jupyter Notebook。

原文标题:Norm of a One-Dimensional Tensor in Python Libraries

原文链接:https://dzone.com/articles/norm-of-a-one-dimensional-tensor-in-python-libraries

作者:Vidyasagar (Sarath Chandra) Machupalli

编译:LCR

0 阅读:0

智能真的很好说

简介:感谢大家的关注