嗯,标题说明了一切:
from numpy import linalg as LA
import numpy as np
fortytwo = np.array(42)
LA.norm(42) # works
LA.norm(fortytwo) # works
# All the lines below raise a ValueError:
LA.norm(fortytwo,np.inf)
LA.norm(fortytwo,-np.inf)
LA.norm(fortytwo,1)
LA.norm(42,1)
我不得不在我的代码中放置一些丑陋的特殊情况来处理这个问题。有没有比标量值的特殊情况更好的方法来处理这个问题?为什么这个函数是这样编写的?
文档也没有提及:http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html
答案 0 :(得分:1)
这是代码的一部分(所有Python都可以查看):
if ord is None and axis is None:
return sqrt(add.reduce((x.conj() * x).real, axis=None))
这是你的情况。
但是当您指定ord
时,它会查看尺寸。在您的情况下nd==0
。
# Normalize the `axis` argument to a tuple.
nd = x.ndim
if axis is None:
axis = tuple(range(nd))
elif not isinstance(axis, tuple):
axis = (axis,)
现在axis
是()
,是一个空元组
if len(axis) == 1:
# do things like .max(axis=axis):
...
elif len(axis) == 2:
row_axis, col_axis = axis
# multi dim. calculations
...
else:
raise ValueError("Improper number of dimensions to norm.")
这是您的错误 - 0d数组和非默认ord
。
我猜他们可能会提出另一种情况 - 如果0d
忽略ord
参数。或者你可以自己做。