这可能不是一个实现问题,而是一个“哲学”问题,但 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.
这看起来像是'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 行。
需要改为:
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 测试,
最有用的评论
问题实际上在代码中更深一点 - 如果您从最初收到的错误中进行回溯,您应该能够找到有问题的位。
正如在 #14719 和 #14215 中的讨论中提到的,> 2 维的行为是一个单独的问题 - 最好将此 PR 限制为 kwarg 处理中的错误。
回复:测试/贡献资源:查看NumPy 的贡献指南。 您还可以查看
numpy/linalg/tests/test_linalg.py
中的 linalg 测试,