linalg.norm没有采用轴参数

Tho*_*ins 8 python numpy norm

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

这段代码:

c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)
Run Code Online (Sandbox Code Playgroud)

返回错误:

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

ask*_*han 11

linalg.norm不接受axis争论.你可以解决这个问题:

np.apply_along_axis(np.linalg.norm, 1, c)
# array([ 3.74165739,  4.24264069])
Run Code Online (Sandbox Code Playgroud)

或者更快,自己实现:

np.sqrt(np.einsum('ij,ij->i',c,c))
# array([ 3.74165739,  4.24264069])
Run Code Online (Sandbox Code Playgroud)

对于时间:

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
Run Code Online (Sandbox Code Playgroud)


Aka*_*all 5

正如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)
Run Code Online (Sandbox Code Playgroud)

结果:

>>> d
array([ 3.74165739,  4.24264069])
Run Code Online (Sandbox Code Playgroud)