我试图计算一个ndarray的log10,但是我得到了以下错误:attribute error:'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]])

我认为原因是type(hx[0,0])是一个Python float类,但我也能够计算float类的log10。我很确定我应该转换某种类型的值,这样它就可以作为numpy.log10()的参数来处理,但我无法发现它。

最佳答案

hx的数据类型是object。您可以在输出中看到这一点,并且可以检查hx.dtype。数组中存储的对象显然是Python float。Numpy不知道对象数组中可能存储了什么,因此它试图将其函数(如log10)分派给数组中的对象。这会失败,因为Python float没有log10方法。
在代码开头尝试此操作:

hx = hx.astype(np.float64)

关于python - 为什么此数组没有属性'log10'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46995041/

10-10 14:28