我在 Pyzo 中使用 Python 3。请你告诉我为什么 linalg.norm 函数不能识别轴参数。
这段代码:
c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)
返回错误:
TypeError: norm() 得到了一个意外的关键字参数“轴”
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
正如 Warren Weckesser 在对问题的评论中指出的那样,在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)
结果:
>>> d
array([ 3.74165739, 4.24264069])