我正在尝试计算ndarray的log10,但是我得到以下错误:AttributeError:'float'对象没有属性'log10',通过做一些研究我发现它与方式python处理数值,但我仍然无法得到为什么我收到此错误。
>>> hx[0:5,:]
array([[0.0],
[0.0],
[0.0],
[0.0],
[0.0]], dtype=object)
>>> type(hx)
<class 'numpy.ndarray'>
>>> type(hx[0,0])
<class 'float'>
>>> test
array([[ 0.],
[ 0.],
[ 0.]])
>>> type(test)
<class 'numpy.ndarray'>
>>> type(test[0,0])
<class 'numpy.float64'>
>>> np.log10(test)
array([[-inf],
[-inf],
[-inf]])
>>> np.log10(hx[0:5,:])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'log10'
>>> np.log10(np.float64(0))
-inf
>>> np.log10([np.float64(0)])
array([-inf])
>>> np.log10([[np.float64(0)]])
array([[-inf]])
>>> np.log10(float(0))
-inf
>>> np.log10([[float(0)]])
array([[-inf]])
我认为原因是类型(hx [0,0])是一个Python float类,但我也能够计算float类的log10。我很确定我应该投出某种值,以便它可以作为numpy.log10()的参数处理,但我无法发现它。
答案 0 :(得分:4)
hx
的数据类型为object
。您可以在输出中看到,并且可以检查hx.dtype
。存储在数组中的对象显然是Python浮点数。 Numpy不知道您可能存储在对象数组中的内容,因此它会尝试将其函数(例如log10
)分派给数组中的对象。这失败了,因为Python浮动没有log10
方法。
在代码的开头尝试:
hx = hx.astype(np.float64)