在Numpy中,如何得到向量的大小?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

按照“只有一种显而易见的方法可以做到”,如何获得Numpy中向量(一维数组)的大小?

def mag(x): 
    return math.sqrt(sum(i**2 for i in x))

提问于
用户回答回答于

你之后的功能是numpy.linalg.norm

import numpy as np
x = np.array([1,2,3,4,5])
np.linalg.norm(x)

还可以提供ord想要的第n个订单标准的可选项。假设你想要1范数:

np.linalg.norm(x,ord=1)

等等。

用户回答回答于

如果你完全担心速度,你应该使用:

mag = np.sqrt(x.dot(x))

以下是一些基准:

>>> import timeit
>>> timeit.timeit('np.linalg.norm(x)', setup='import numpy as np; x = np.arange(100)', number=1000)
0.0450878
>>> timeit.timeit('np.sqrt(x.dot(x))', setup='import numpy as np; x = np.arange(100)', number=1000)
0.0181372

真正的速度提高时,你必须采取许多向量的范数。使用纯numpy函数不需要任何for循环。例如:

In [1]: import numpy as np

In [2]: a = np.arange(1200.0).reshape((-1,3))

In [3]: %timeit [np.linalg.norm(x) for x in a]
100 loops, best of 3: 4.23 ms per loop

In [4]: %timeit np.sqrt((a*a).sum(axis=1))
100000 loops, best of 3: 18.9 us per loop

In [5]: np.allclose([np.linalg.norm(x) for x in a],np.sqrt((a*a).sum(axis=1)))
Out[5]: True

扫码关注云+社区