我在Pyzo中使用Python 3。请你能告诉我为什么linalg.norm函数不能识别轴参数。linalg.norm未采用轴参数
此代码:
c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)
返回错误:
TypeError: norm() got an unexpected keyword argument 'axis'
我在Pyzo中使用Python 3。请你能告诉我为什么linalg.norm函数不能识别轴参数。linalg.norm未采用轴参数
此代码:
c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)
返回错误:
TypeError: norm() got an unexpected keyword argument 'axis'
linalg.norm
不接受axis
说法。让您可以与:
np.sqrt(np.einsum('ij,ij->i',c,c))
# array([ 3.74165739, 4.24264069])
对于时机:
np.apply_along_axis(np.linalg.norm, 1, 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
谢谢。你的第一个建议对我来说很好。 –
在numpy
版本低于1.8
linalg.norm
不采取axis
的说法,你可以用np.apply_along_axis
得到您想要的结果,如指出,由沃伦Weckesser在对这个问题的评论。
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)
结果:
>>> d
array([ 3.74165739, 4.24264069])
谢谢,这个按照需要工作。 –
Downvoter,你可以发表评论,至于你为什么downvoted? – Akavall
不知道downvoter,但这对我工作!小的更正:您需要在上面的示例代码中使用np.linalg。特别感谢评论它在v1.8以下不起作用。 – GnomeDePlume
在1.8版本中添加了'axis'参数的numpy;请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html。你使用什么版本? –