繁体   English   中英

有没有办法用numpy归一化具有不同输入大小的向量

[英]is there a way to normalize vectors with different input size with numpy

以下函数尝试对3D向量进行归一化

def my_norm(v):
    """
    @type v: Nx3 numpy array
    """
    return v / numpy.linalg.norm(v, axis=1)[:, None] 

当N> 1时,它起作用。对于N = 1,我得到ValueError: 'axis' entry is out of bounds 我可以进行以下检查来处理这两种情况,但是我想知道是否有更清洁的方法?

def my_norm(v):
    """
    @type v: Nx3 numpy array
    """
    if len(v) == 1:
        return v / numpy.linalg.norm(v)
    return v / numpy.linalg.norm(v, axis=1)[:, None] 

使用axis=-1并保持尺寸为keepdims=True

v/np.linalg.norm(v, axis=-1,keepdims=True)

样品运行

一维保护套:

In [61]: v = np.random.rand(6)

In [62]: v/np.linalg.norm(v)
Out[62]: array([ 0.22,  0.1 ,  0.28,  0.58,  0.64,  0.33])

In [63]: v/np.linalg.norm(v, axis=-1,keepdims=True)
Out[63]: array([ 0.22,  0.1 ,  0.28,  0.58,  0.64,  0.33])

2D外壳:

In [58]: v = np.random.rand(4,6)

In [59]: v / np.linalg.norm(v, axis=1)[:, None]
Out[59]: 
array([[ 0.53,  0.04,  0.38,  0.21,  0.58,  0.43],
       [ 0.49,  0.4 ,  0.02,  0.56,  0.38,  0.38],
       [ 0.05,  0.49,  0.45,  0.18,  0.54,  0.47],
       [ 0.45,  0.61,  0.19,  0.1 ,  0.14,  0.61]])

In [60]: v/np.linalg.norm(v, axis=-1,keepdims=True)
Out[60]: 
array([[ 0.53,  0.04,  0.38,  0.21,  0.58,  0.43],
       [ 0.49,  0.4 ,  0.02,  0.56,  0.38,  0.38],
       [ 0.05,  0.49,  0.45,  0.18,  0.54,  0.47],
       [ 0.45,  0.61,  0.19,  0.1 ,  0.14,  0.61]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM