linalg.norm没有采用轴参数

时间:2013-11-23 22:18:22

标签: python numpy norm

我在Pyzo中使用Python 3。请问你能告诉我为什么linalg.norm函数不能识别axis参数。

此代码:

c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)

返回错误:

  

TypeError:norm()得到了一个意外的关键字参数'axis'

2 个答案:

答案 0 :(得分:10)

linalg.norm不接受axis参数。你可以通过以下方式解决这个问题:

np.apply_along_axis(np.linalg.norm, 1, c)
# array([ 3.74165739,  4.24264069])

或者更快,自己实现:

np.sqrt(np.einsum('ij,ij->i',c,c))
# array([ 3.74165739,  4.24264069])

时间安排:

timeit np.apply_along_axis(np.linalg.norm, 1, c)
10000 loops, best of 3: 170 µs per loop

timeit np.sqrt(np.einsum('ij,ij->i',c,c))
100000 loops, best of 3: 10.7 µs per loop

答案 1 :(得分:4)

numpy 1.8以下的linalg.norm版本中,如果axis没有np.apply_along_axis参数,您可以使用import numpy as np from numpy import linalg c = np.array([[ 1, 2, 3],[-1, 1, 4]]) d = np.apply_along_axis(linalg.norm, 1, c) 来获得所需的结果,正如Warren所指出的那样Weckesser在对问题的评论中。

>>> d
array([ 3.74165739,  4.24264069])

结果:

{{1}}