如何修复 'Float' 对象没有属性 'exp'?
How to fix 'Float' object has no attribute 'exp'?
我在Python中有以下高斯方程:
numpy.exp((-(x-m)**2)/(2*sigma))
前提是x
是矩阵
但是,方程不会运行,我得到以下错误:
AttributeError: 'Float' object has no attribute 'exp'
我该如何解决这个问题?
EDIT-1
进行以下编辑:
map(float(),np.exp((-(x-m)**2)/(2*sigma)))
引发错误:
TypeError: 'float' object is not callable
EDIT-2
这是值的示例 x
:
[[-0.20646505 0.07763347 -0.16161097 0.370439 ]
[-0.91295327 -0.73768934 -0.78909055 0.06156045]
[-0.37242104 0.51828245 -1.16138222 -0.02489585]
[-1.07890926 -0.29704036 -1.7888618 -0.3337744 ]]
m = 5
sigma = 1
谢谢。
可能是因为您将数组的 dtype 作为对象,所以将其转换为浮点数,即
x = np.array([[-0.20646505, 0.07763347, -0.16161097, 0.370439 ],
[-0.91295327,-0.73768934, -0.78909055, 0.06156045],
[-0.37242104, 0.51828245, -1.16138222, -0.02489585],
[-1.07890926, -0.29704036, -1.7888618, -0.3337744 ]],dtype=object)
m = 5
sigma = 1
np.exp((-(x-m)**2)/(2*sigma))
这将导致:
AttributeError: 'float' object has no attribute 'exp'
将其转换为浮点数即:
np.exp((-(x.astype(float)-m)**2)/(2*sigma))
array([[ 1.29935943e-06, 5.47758566e-06, 1.63950875e-06,
2.21778276e-05],
[ 2.55786406e-08, 7.10033001e-08, 5.27984133e-08,
5.06026050e-06],
[ 5.40131118e-07, 4.34936286e-05, 5.70846640e-09,
3.28945338e-06],
[ 9.45644899e-09, 8.07503629e-07, 9.81698210e-11,
6.64271640e-07]])
这也取决于您使用的 numpy 版本。您还应该尝试更新 numpy,修复了很多错误。
Use python 3 instead of 2!
这一定是由于 anaconda 环境或其他原因导致的问题代码是正确的,只需使用 python3.x 代替!
map(float(),np.exp((-(x-m)**2)/(2*sigma)))
map
接受一个函数和一个可迭代对象。 float
是一个函数,float()
是将它应用到空的结果
In [173]: float()
Out[173]: 0.0
因此有人抱怨浮动不是可调用的。这不是函数。
map
和 float
的正确用法是:
In [175]: list(map(float, [1,2,3]))
Out[175]: [1.0, 2.0, 3.0]
第二个参数是您已经遇到问题的表达式。如果x
在原来的方法中不起作用,那么在这个调用中也不起作用。
np.exp
应用于对象 dtype 数组,尝试将操作委托给数组的每个对象。
In [174]: np.exp(np.array([[1,2],3,4]))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-174-82d2b5b40b53> in <module>()
----> 1 np.exp(np.array([[1,2],3,4]))
AttributeError: 'list' object has no attribute 'exp'
但是大多数对象没有 exp
方法。
原始问题的关键是理解为什么你的 x
是一个对象 dtype 数组。为什么不是浮点数组?它是如何建造的?
另一个答案中的解决方案,将对象数组转换为浮点数组在这种情况下有效,但可能不适用于更通用的对象数组。
x
表达式的其余部分确实适用于对象 dtype 数组。在对象 dtype 数组上的一般数学是不确定的 - 为某事工作,而不是为其他人工作。它将任务委托给每个元素,因此 -
和 **
等基本运算符起作用。但即使它运行起来也很慢。
In [177]: x =np.random.random((4,2))
In [178]: (-(x-m)**2)/(2*sigma)
Out[178]:
array([[ -8.07952334, -8.15537868],
[-10.37197226, -10.27704074],
[-11.57978784, -11.18915471],
[-10.39579226, -10.8018881 ]])
In [179]: (-(x.astype(object)-m)**2)/(2*sigma)
Out[179]:
array([[-8.079523343837689, -8.155378680249662],
[-10.371972261358971, -10.277040739722857],
[-11.579787836524062, -11.189154714963014],
[-10.395792264129886, -10.80188810039029]], dtype=object)
In [180]: np.exp((-(x.astype(object)-m)**2)/(2*sigma))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-180-e040a450f8e2> in <module>()
----> 1 np.exp((-(x.astype(object)-m)**2)/(2*sigma))
AttributeError: 'float' object has no attribute 'exp'
我在Python中有以下高斯方程:
numpy.exp((-(x-m)**2)/(2*sigma))
前提是x
是矩阵
但是,方程不会运行,我得到以下错误:
AttributeError: 'Float' object has no attribute 'exp'
我该如何解决这个问题?
EDIT-1
进行以下编辑:
map(float(),np.exp((-(x-m)**2)/(2*sigma)))
引发错误:
TypeError: 'float' object is not callable
EDIT-2
这是值的示例 x
:
[[-0.20646505 0.07763347 -0.16161097 0.370439 ]
[-0.91295327 -0.73768934 -0.78909055 0.06156045]
[-0.37242104 0.51828245 -1.16138222 -0.02489585]
[-1.07890926 -0.29704036 -1.7888618 -0.3337744 ]]
m = 5
sigma = 1
谢谢。
可能是因为您将数组的 dtype 作为对象,所以将其转换为浮点数,即
x = np.array([[-0.20646505, 0.07763347, -0.16161097, 0.370439 ],
[-0.91295327,-0.73768934, -0.78909055, 0.06156045],
[-0.37242104, 0.51828245, -1.16138222, -0.02489585],
[-1.07890926, -0.29704036, -1.7888618, -0.3337744 ]],dtype=object)
m = 5
sigma = 1
np.exp((-(x-m)**2)/(2*sigma))
这将导致:
AttributeError: 'float' object has no attribute 'exp'
将其转换为浮点数即:
np.exp((-(x.astype(float)-m)**2)/(2*sigma))
array([[ 1.29935943e-06, 5.47758566e-06, 1.63950875e-06,
2.21778276e-05],
[ 2.55786406e-08, 7.10033001e-08, 5.27984133e-08,
5.06026050e-06],
[ 5.40131118e-07, 4.34936286e-05, 5.70846640e-09,
3.28945338e-06],
[ 9.45644899e-09, 8.07503629e-07, 9.81698210e-11,
6.64271640e-07]])
这也取决于您使用的 numpy 版本。您还应该尝试更新 numpy,修复了很多错误。
Use python 3 instead of 2!
这一定是由于 anaconda 环境或其他原因导致的问题代码是正确的,只需使用 python3.x 代替!
map(float(),np.exp((-(x-m)**2)/(2*sigma)))
map
接受一个函数和一个可迭代对象。 float
是一个函数,float()
是将它应用到空的结果
In [173]: float()
Out[173]: 0.0
因此有人抱怨浮动不是可调用的。这不是函数。
map
和 float
的正确用法是:
In [175]: list(map(float, [1,2,3]))
Out[175]: [1.0, 2.0, 3.0]
第二个参数是您已经遇到问题的表达式。如果x
在原来的方法中不起作用,那么在这个调用中也不起作用。
np.exp
应用于对象 dtype 数组,尝试将操作委托给数组的每个对象。
In [174]: np.exp(np.array([[1,2],3,4]))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-174-82d2b5b40b53> in <module>()
----> 1 np.exp(np.array([[1,2],3,4]))
AttributeError: 'list' object has no attribute 'exp'
但是大多数对象没有 exp
方法。
原始问题的关键是理解为什么你的 x
是一个对象 dtype 数组。为什么不是浮点数组?它是如何建造的?
另一个答案中的解决方案,将对象数组转换为浮点数组在这种情况下有效,但可能不适用于更通用的对象数组。
x
表达式的其余部分确实适用于对象 dtype 数组。在对象 dtype 数组上的一般数学是不确定的 - 为某事工作,而不是为其他人工作。它将任务委托给每个元素,因此 -
和 **
等基本运算符起作用。但即使它运行起来也很慢。
In [177]: x =np.random.random((4,2))
In [178]: (-(x-m)**2)/(2*sigma)
Out[178]:
array([[ -8.07952334, -8.15537868],
[-10.37197226, -10.27704074],
[-11.57978784, -11.18915471],
[-10.39579226, -10.8018881 ]])
In [179]: (-(x.astype(object)-m)**2)/(2*sigma)
Out[179]:
array([[-8.079523343837689, -8.155378680249662],
[-10.371972261358971, -10.277040739722857],
[-11.579787836524062, -11.189154714963014],
[-10.395792264129886, -10.80188810039029]], dtype=object)
In [180]: np.exp((-(x.astype(object)-m)**2)/(2*sigma))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-180-e040a450f8e2> in <module>()
----> 1 np.exp((-(x.astype(object)-m)**2)/(2*sigma))
AttributeError: 'float' object has no attribute 'exp'