如何将 NumPy 数组规范化为单位向量?

新手上路,请多包涵

我想将 NumPy 数组转换为单位向量。更具体地说,我正在寻找此规范化函数的等效版本:

 def normalize(v):
    norm = np.linalg.norm(v)
    if norm == 0:
       return v
    return v / norm

此函数处理向量 v 的范数值为 0 的情况。

sklearnnumpy 中是否提供了任何类似的功能?

原文由 Donbeo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 766
2 个回答

如果您使用的是 scikit-learn,则可以使用 sklearn.preprocessing.normalize

 import numpy as np
from sklearn.preprocessing import normalize

x = np.random.rand(1000)*10
norm1 = x / np.linalg.norm(x)
norm2 = normalize(x[:,np.newaxis], axis=0).ravel()
print np.all(norm1 == norm2)
# True

原文由 ali_m 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏