我想将 NumPy 数组转换为单位向量。更具体地说,我正在寻找此规范化函数的等效版本:
def normalize(v):
norm = np.linalg.norm(v)
if norm == 0:
return v
return v / norm
此函数处理向量 v
的范数值为 0 的情况。
sklearn
或 numpy
中是否提供了任何类似的功能?
原文由 Donbeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想将 NumPy 数组转换为单位向量。更具体地说,我正在寻找此规范化函数的等效版本:
def normalize(v):
norm = np.linalg.norm(v)
if norm == 0:
return v
return v / norm
此函数处理向量 v
的范数值为 0 的情况。
sklearn
或 numpy
中是否提供了任何类似的功能?
原文由 Donbeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我同意,如果这样的功能是包含的库的一部分,那就太好了。但据我所知,事实并非如此。所以这是一个提供最佳性能的任意轴版本。
import numpy as np
def normalized(a, axis=-1, order=2):
l2 = np.atleast_1d(np.linalg.norm(a, order, axis))
l2[l2==0] = 1
return a / np.expand_dims(l2, axis)
A = np.random.randn(3,3,3)
print(normalized(A,0))
print(normalized(A,1))
print(normalized(A,2))
print(normalized(np.arange(3)[:,None]))
print(normalized(np.arange(3)))
原文由 Eelco Hoogendoorn 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
如果您使用的是 scikit-learn,则可以使用
sklearn.preprocessing.normalize
: