【发布时间】:2018-04-05 01:31:03
【问题描述】:
大家好,我只是 python 的新手(即使是编程),所以我的问题可能听起来很基础,但我很难理解。
为什么对“浮点对象”的算术有选择性行为?
import numpy as np
a = np.random.normal(size=10)
a = np.abs(a)
b = np.array(a, dtype=object)
np.square(a) # this works
np.square(b) # this works
np.sqrt(a) # this works
np.sqrt(b) # AttributeError: 'float' object has no attribute 'sqrt'
图片链接是我在本地jupyter notebook中的运行结果:
欣赏有用的见解!谢谢
edit 050418 09:53 --添加一个我认为是类似问题的链接 Numpy AttributeError: 'float' object has no attribute 'exp'
【问题讨论】:
-
作者提前道歉,因为他不知道如何输出ipython控制台直接在屏幕上显示结果>
-
对于对象 dtype 数组,
numpy将计算委托给元素(有点像列表理解)。结果是某些计算有效,而另一些则无效。你找到了一对可以说明这一点。两者都是编译的,因此很难看出委托有何不同。 -
嗨@hpaulj ...您的意思是在文档中编译吗?上次我在里面搜索时没有找到任何东西。你能提供任何链接吗? tq
-
我用
ipython双问号检查 Python 代码:??作为一般规则,不要指望对对象 dtype 数组进行数学运算。它是命中注定的。即使它有效,它也比数字 dtypes 慢。 -
numpy
square知道它可以将操作委托给对象的__mul__方法(如果有的话),Pythonfloat对象会这样做。如果一个对象有一个sqrt方法,numpy.sqrt将委托给它。 Pythonfloat没有sqrt方法。