Python linalg.norm不接受轴参数
我在Pyzo中使用python3。请告诉我为什么linalg.norm函数不能识别轴参数 此代码:Python linalg.norm不接受轴参数,python,numpy,norm,Python,Numpy,Norm,我在Pyzo中使用python3。请告诉我为什么linalg.norm函数不能识别轴参数 此代码: c = np.array([[ 1, 2, 3],[-1, 1, 4]]) d=linalg.norm(c, axis=1) 返回错误: TypeError:norm()获得意外的关键字参数“axis” 在下面的numpy版本1.8linalg.norm不使用axis参数,您可以使用np。如Warren Weckesser在对问题的评论中所指出的,沿轴应用[u以获得所需的结果 import nu
c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)
返回错误:
TypeError:norm()获得意外的关键字参数“axis”
在下面的
numpy
版本1.8
linalg.norm
不使用axis
参数,您可以使用np。如Warren Weckesser在对问题的评论中所指出的,沿轴应用[u
以获得所需的结果
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])
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
非常感谢。您的第一个建议对我来说很好。
axis
参数是在numpy的1.8版中添加的;看见你用的是什么版本?不知道downvoter,但这对我有用!小更正:在上面的示例代码中需要np.linalg。特别感谢您对它在v1.8以下无法工作的评论。@GnomeDePlume,谢谢。在我的代码中,我分别导入linalg
,因此我的代码按原样工作。当然,只导入numpy
可能更优雅。哎呀,我忽略了这一点!修订后的更正:)