首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将NumPy数组归一化为单位向量?

如何将NumPy数组归一化为单位向量?
EN

Stack Overflow用户
提问于 2014-01-10 04:25:04
回答 11查看 770K关注 0票数 260

我想把一个NumPy数组转换成一个单位向量。更具体地说,我正在寻找此归一化函数的等效版本:

代码语言:javascript
复制
def normalize(v):
    norm = np.linalg.norm(v)
    if norm == 0: 
       return v
    return v / norm

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

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2014-01-10 05:15:34

如果你正在使用scikit learn,你可以使用sklearn.preprocessing.normalize

代码语言:javascript
复制
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
票数 209
EN

Stack Overflow用户

发布于 2014-01-10 05:59:18

我同意,如果这样的函数是所包含的库的一部分,那就太好了。但据我所知,情况并非如此。因此,这里是一个版本的任意轴,提供最佳的性能。

代码语言:javascript
复制
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)))
票数 56
EN

Stack Overflow用户

发布于 2018-07-25 15:17:44

这可能也适用于你。

代码语言:javascript
复制
import numpy as np
normalized_v = v / np.sqrt(np.sum(v**2))

但当v的长度为0时会失败。

在这种情况下,引入一个小常量来防止零除可以解决这个问题。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21030391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档