张量和向量的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了张量和向量的区别相关的知识,希望对你有一定的参考价值。
参考技术A1.张量
张量( tensor ):超过二维的数组,一般来说,一个数组中的元素分布在若干维坐标的规则网格中,被称为张量。如果一个张量是三维数组,那么我们就需要三个索引来决定元素的位置 A ( i , j , k ),张量通常用加粗的大写字母表示。
2.向量
向量( vector ):一个向量表示一组有序排列的数,通过次序中的索引我们能够找到每个单独的数,向量通常用粗体的小写字母表示。向量中的每个元素就是一个标量,向量相当于 Python 中的一维数组。
3.区别:向量就是我们除了知道棍子的长度之外还知道棍子指向的是左边还是右边。 矩阵就是除了知道向量知道的信息外还知道棍子是朝上还是朝下。张量就是除了知道矩阵知道的信息外还知道棍子是朝前还是朝后。
计算多维火炬张量中向量之间的欧几里得距离
【中文标题】计算多维火炬张量中向量之间的欧几里得距离【英文标题】:To calculate euclidean distance between vectors in a torch tensor with multiple dimensions 【发布时间】:2021-09-14 03:05:39 【问题描述】:有一个随机初始化的火炬张量,形状如下。
输入
tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))
tensor1
和 tensor2
分别是具有 24 个 100 维向量的火炬张量。
我想通过获取两个张量的相同索引的向量之间的欧几里德距离来得到一个形状为torch.size([4,2,3])
的张量。
我使用dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
得到了我想要的结果。
但是,pairwise_distance
函数计算张量第二维的欧几里得距离。所以dist
的形状是torch.size([4,3,100])
。
我已经多次执行转置来解决这些问题。我的代码如下。
tensor1 = tensor1.transpose(1,3)
tensor2 = tensor2.transpose(1,3)
dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
dist = dist.transpose(1,2)
有没有更简单或更容易的方法来获得我想要的结果?
【问题讨论】:
【参考方案1】:来吧
dist = (tensor1 - tensor2).pow(2).sum(3).sqrt()
基本上这就是欧几里得距离。
减去 -> 2 的幂 -> 沿要消除的不幸轴求和 -> 平方根
【讨论】:
以上是关于张量和向量的区别的主要内容,如果未能解决你的问题,请参考以下文章
张量流中 GradientDescentOptimizer 和 AdamOptimizer 的区别?