Python'AttributeError:'function'对象没有属性'min''

时间:2013-04-10 15:42:49

标签: python numpy attributes attributeerror

首先,对这两个问题的明显程度表示道歉;我对此非常陌生,并且不知道我在做什么。

我正在尝试编写一些内容来将样条插值的Scipy函数应用于值数组。我的代码目前看起来像这样:

import numpy as np
import scipy as sp
from scipy.interpolate import interp1d

x=var
x1 = ([0.1,0.3,0.4])
y1 = [0.2,0.5,0.6]

new_length = 25
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)

但是当它到达行

new_x = np.linspace(x.min(), x.max(), new_length)

我收到以下错误:

AttributeError: 'function' object has no attribute 'min'
到目前为止,谷歌搜索等没有发现任何我理解的内容。这是什么意思,我该如何解决?

第二个问题:如何一次输入多行代码?目前,如果我尝试复制整个内容然后将其粘贴到PyLab中,它只输入我的代码的顶行,所以我必须一次将整个内容粘贴到一行中。我如何解决这个问题?

6 个答案:

答案 0 :(得分:9)

如果这一行

new_x = np.linspace(x.min(), x.max(), new_length)

正在生成错误消息

AttributeError: 'function' object has no attribute 'min'

然后x是一个函数,函数(通常)没有min属性,因此您无法调用some_function.min()。什么是x?在您的代码中,您只将其定义为

x=var

我不确定var是什么。 var不是Python内置的默认值,但是如果它是一个函数,那么你是出于某些原因自己定义的,或者你是从某个地方挑选出来的(比如你是在使用Sage,或者你做了像from sympy import *之类的明星导入。)

[更新:因为你说你正在“使用PyLab”,可能varnumpy.var,它已经在IPython启动时被导入范围。我认为你的意思是“在--pylab模式下使用IPython。”

您还定义了x1y1,但后来的代码引用了xy,所以感觉这段代码介于两个功能之间的状态。

现在numpy数组.min().max()方法,所以:

>>> x = np.array([0.1, 0.3, 0.4, 0.7])
>>> y = np.array([0.2, 0.5, 0.6, 0.9])
>>> new_length = 25
>>> new_x = np.linspace(x.min(), x.max(), new_length)
>>> new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)

会奏效。您的测试数据不会因为插值需要至少4个点而且你得到

ValueError: x and y arrays must have at least 4 entries

答案 1 :(得分:3)

  

第二个问题:如何一次输入多行代码?目前,如果我尝试复制整个内容然后将其粘贴到PyLab中,它只输入我的代码的顶行,所以我必须一次将整个内容粘贴到一行中。我如何解决这个问题?

假设您在ipython中被称为ipython --pylab或类似名称,那么您只需使用the paste magic command即可。如果您尚未将%paste定义为另一个变量,请将其称为paste或简称为paste

In [8]: paste
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d

x=var
x1 = ([0.1,0.3,0.4])
y1 = [0.2,0.5,0.6]

new_length = 25
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)

## -- End pasted text --
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-8-b4e41f59d719> in <module>()
      3 from scipy.interpolate import interp1d
      4 
----> 5 x=var
      6 x1 = ([0.1,0.3,0.4])
      7 y1 = [0.2,0.5,0.6]

NameError: name 'var' is not defined

In [9]: 

答案 2 :(得分:2)

将该行更改为:

new_x = np.linspace(min(x), max(x), new_length)

minmax不是列表的属性,它们是自己的函数。

答案 3 :(得分:0)

当我调用timezone.now而不是timezone.now()时遇到了类似的错误。然后,我尝试格式化我期望的DateTime值。但这不是DateTime;这是一个功能。这导致出现一条错误消息,提示“月份”不是“功能”的属性。

解决方法是在now之后简单地添加括号。这称为now函数并返回其结果,而不是返回now function对象本身。

愚蠢的错误,我知道。但是不容易解决。

答案 4 :(得分:0)

我遇到了类似的问题。

我的错误是我将变量和函数名称命名为相同的名称。

我更正了,错误消失了。

答案 5 :(得分:-1)

Int没有min()函数,但min()是内置函数。你需要使用min(x)。