首先,对这两个问题的明显程度表示道歉;我对此非常陌生,并且不知道我在做什么。
我正在尝试编写一些内容来将样条插值的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中,它只输入我的代码的顶行,所以我必须一次将整个内容粘贴到一行中。我如何解决这个问题?
答案 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”,可能var
是numpy.var
,它已经在IPython启动时被导入范围。我认为你的意思是“在--pylab
模式下使用IPython。”
您还定义了x1
和y1
,但后来的代码引用了x
和y
,所以感觉这段代码介于两个功能之间的状态。
现在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)
min
和max
不是列表的属性,它们是自己的函数。
答案 3 :(得分:0)
当我调用timezone.now
而不是timezone.now()
时遇到了类似的错误。然后,我尝试格式化我期望的DateTime
值。但这不是DateTime
;这是一个功能。这导致出现一条错误消息,提示“月份”不是“功能”的属性。
解决方法是在now
之后简单地添加括号。这称为now
函数并返回其结果,而不是返回now function
对象本身。
愚蠢的错误,我知道。但是不容易解决。
答案 4 :(得分:0)
我遇到了类似的问题。
我的错误是我将变量和函数名称命名为相同的名称。
我更正了,错误消失了。
答案 5 :(得分:-1)
Int没有min()函数,但min()是内置函数。你需要使用min(x)。