Python'AttributeError:'function'对象没有属性'min' [英] Python 'AttributeError: 'function' object has no attribute 'min''

查看:115
本文介绍了Python'AttributeError:'function'对象没有属性'min'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,对这两个问题看起来如此明显的道歉;我对此非常陌生,不知道我在做什么.

Firstly, apologies for how obvious these two questions seem to be; I'm very very new to this and don't have a clue what I'm doing.

我正在尝试编写一些东西,以将Scipy函数用于样条插值到值数组.我的代码当前如下所示:

I'm trying to write something to apply the Scipy function for spline interpolation to an array of values. My code currently looks like this:

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'

,到目前为止,谷歌搜索等并没有使我理解.这是什么意思,我该如何解决?

and so far googling etc has turned up nothing that I understand. What does this mean and how do I fix it?

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

Second question: how do I input more than one line of code at once? At the moment, if I try to copy the whole thing and then paste it into PyLab, it only inputs the top line of my code, so I have to paste the whole thing in one line at a time. How do I get round this?

推荐答案

如果这行

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

正在生成错误消息

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

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

then x is a function, and functions (in general) don't have min attributes, so you can't call some_function.min(). What is x? In your code, you've only defined it as

x=var

我不确定 var 是什么. var 并不是Python中的默认内置函数,但是如果它是一个函数,那么您要么是出于某种原因自己定义了它,要么是从某个地方摘下来的(例如,您使用的是Sage),或者您执行了像 from sympy import * 之类的星形导入.)

I'm not sure what var is. var isn't a default builtin in Python, but if it's a function, then either you've defined it yourself for some reason or you've picked it up from somewhere (say you're using Sage, or you did a star import like from sympy import * or something.)

[更新:由于您说的是使用PyLab",因此 var 可能是 numpy.var ,它已在IPython启动时导入到作用域中.我认为您的意思是在-pylab 模式下使用IPython.]

[Update: since you say you're "using PyLab", probably var is numpy.var which has been imported into scope at startup in IPython. I think you really mean "using IPython in --pylab mode.]

您还定义了 x1 y1 ,但是后来的代码引用了 x y ,因此感觉就像这段代码位于两个功能状态之间.

You also define x1 and y1, but then your later code refers to x and y, so it sort of feels like this code is halfway between two functional states.

现在 numpy 数组 do 具有 .min() .max()方法,因此:

Now numpy arrays do have a .min() and .max() method, so this:

>>> 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点而得到

would work. Your test data won't because the interpolation needs at least 4 points, and you'd get

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

这篇关于Python'AttributeError:'function'对象没有属性'min'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆