Numpy: 为向量定义的 Frobenius 范数?

创建于 2020-02-06  ·  6评论  ·  资料来源: numpy/numpy

这可能不是一个实现问题,而是一个“哲学”问题,但 Frobenius 范数不应该在向量上工作吗? 资料来源:沃尔夫拉姆

目前,numpy 中的 Frobenius 范数不接受向量:

import numpy as np
a = np.random.rand(10, 1)
b = np.squeeze(a)
print(np.linalg.norm(a, 'fro'))
print(np.linalg.norm(b, 'fro'))

结果是:

1.7594677278427366
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
//anaconda3/lib/python3.7/site-packages/numpy/linalg/linalg.py in norm(x, ord, axis, keepdims)
   2515             try:
-> 2516                 ord + 1
   2517             except TypeError:

TypeError: can only concatenate str (not "int") to str

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-18-2ace847024a5> in <module>
      3 b = np.squeeze(a)
      4 print(np.linalg.norm(a, 'fro'))
----> 5 print(np.linalg.norm(b, 'fro'))

<__array_function__ internals> in norm(*args, **kwargs)

//anaconda3/lib/python3.7/site-packages/numpy/linalg/linalg.py in norm(x, ord, axis, keepdims)
   2516                 ord + 1
   2517             except TypeError:
-> 2518                 raise ValueError("Invalid norm order for vectors.")
   2519             absx = abs(x)
   2520             absx **= ord

ValueError: Invalid norm order for vectors.
00 - Bug numpy.linalg good first issue

最有用的评论

问题实际上在代码中更深一点 - 如果您从最初收到的错误中进行回溯,您应该能够找到有问题的位。

正如在 #14719 和 #14215 中的讨论中提到的,> 2 维的行为是一个单独的问题 - 最好将此 PR 限制为 kwarg 处理中的错误。

回复:测试/贡献资源:查看NumPy 的贡献指南。 您还可以查看numpy/linalg/tests/test_linalg.py中的 linalg 测试,

所有6条评论

这看起来像是'fro' kwarg 处理中的一个错误:

>>> print(np.linalg.norm(b))
1.7547099704258247

请注意,当ord kwarg 为 None 时,Frobenius 范数是默认值。

外部参照 gh-14719 和 gh-14215:我们考虑过弃用一般情况,但后来没有继续下去,因为虽然没有很大的阻力,但还是有一些阻力。 其他一些包将其定义为。 所以问题是决定到底去哪里......

正如罗斯向我指出的那样,我链接的问题/公关只是切线相关的,这显然是"fro"处理中的一个错误。

欢迎使用 PR 来解决 kwarg 处理(以及随附的测试)中的错误! 不错的收获@TNonet

既然这是我的第一个问题,那么是否有任何资源可以进行适当的测试和请求请求?

(另外,如果我要克隆 numpy 存储库并运行 setup.py,我将如何确定导入 numpy 时使用的是哪个 numpy 版本?)

我会争论如果 ord 是“来回”,那么下面的第 2512-14 行。

https://github.com/numpy/numpy/blob/dae4f67c797176c66281101be8f3b4d6c424735c/numpy/linalg/linalg.py#L2510 -L2524

需要改为:

if ((ord is None) or 
    (ord in ('f', 'fro')) or 
    (ord == 2 and ndim == 1)): 

假设每个人都同意一个n阶数组具有一个Forbenious范数,它自然地将每个元素的平方相加。

问题实际上在代码中更深一点 - 如果您从最初收到的错误中进行回溯,您应该能够找到有问题的位。

正如在 #14719 和 #14215 中的讨论中提到的,> 2 维的行为是一个单独的问题 - 最好将此 PR 限制为 kwarg 处理中的错误。

回复:测试/贡献资源:查看NumPy 的贡献指南。 您还可以查看numpy/linalg/tests/test_linalg.py中的 linalg 测试,

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Kreol64 picture Kreol64  ·  3评论

toddrjen picture toddrjen  ·  4评论

astrofrog picture astrofrog  ·  4评论

Foadsf picture Foadsf  ·  3评论

qualiaa picture qualiaa  ·  3评论