【问题标题】:Get the 1-norm of a vector in Python在 Python 中获取向量的 1 范数
【发布时间】:2013-08-31 01:47:51
【问题描述】:

如何在 Python 中计算两个向量 ||a - b||_1 = sum(|a_i - b_i|) 的差的 1 范数?

a = [1,2,3,4]  
b = [2,3,4,5]

||a - b||_1 = 4  

【问题讨论】:

  • 你能澄清一下吗?目前尚不清楚(至少对我而言)您要执行哪种操作......这不是 4D 矢量距离,也不是设定的交点,那是什么?
  • 其次,不知道你想在这里做什么。
  • 他的意思可能是1-范数距离。

标签: python vector norm


【解决方案1】:

Python 具有强大的内置类型,但 Python 列表不是数学向量或矩阵。你可以用列表来做这件事,但是除了琐碎的操作之外,它可能会很麻烦。

如果您发现自己经常需要向量或矩阵算术,该领域的标准是NumPy,它可能已经为您的操作系统打包,就像 Python 一样。

我与其他人一样对您正在尝试做什么感到困惑,但也许 numpy.linalg.norm 函数会有所帮助:

>>> import numpy
>>> a = numpy.array([1, 2, 3, 4])
>>> b = numpy.array([2, 3, 4, 5])
>>> numpy.linalg.norm((a - b), ord=1)
4

为了展示它是如何在幕后工作的:

>>> a
array([1, 2, 3, 4])
>>> b
array([2, 3, 4, 5])
>>> (a - b)
array([-1, -1, -1, -1])
>>> numpy.linalg.norm((a - b))
2.0
>>> numpy.linalg.norm((a - b), ord=1)
4

【讨论】:

    【解决方案2】:

    在 NumPy 中,对于两个向量 ab,这只是

    numpy.linalg.norm(a - b, ord=1)
    

    【讨论】:

      【解决方案3】:

      您似乎在询问两个数组的成对组件之间的差异之和:

      >>> A=[1,2,3,4]
      >>> B=[2,3,4,5]
      >>> sum(abs(a - b) for a, b in zip(A, B))
      4
      

      【讨论】:

      • l1 规范就是这样;这是一种非常晦涩的表达方式,但在数学中你一直都在写它。符号是||x||,它通常默认为欧几里得范数(向量距离,在物理意义上),但x / ||x||_1 将是x 中项目的概率,而x / ||x||_2 将是单位向量跨度>
      • 这又回到了勾股定理:在三角形中,l1 范数是 a+b(曼哈顿距离),而 l2 范数是斜边的长度
      【解决方案4】:

      不清楚这里到底需要什么,但这是我的猜测

      a=[1,2,3,4]
      b=[2,3,4,5]
      def a_b(a,b):
          return sum(map(lambda a:abs(a[0]-a[1]), zip(a,b)))
      
      print a_b(a,b)
      

      【讨论】:

        猜你喜欢
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多