Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python 'AttributeError: 'function' object has no attribute '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.

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)

but when it gets to the line

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

I get the following error:

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?

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?

like image 740
Tom Robinson Avatar asked Apr 10 '13 15:04

Tom Robinson


People also ask

How do I fix No attribute error in Python?

To solve the Python "AttributeError: module has no attribute", make sure you haven't named your local modules with names of remote modules, e.g. datetime.py or requests.py and remove any circular dependencies in import statements.

What is a function object in Python?

In Python, functions behave like any other object, such as an int or a list. That means that you can use functions as arguments to other functions, store functions as dictionary values, or return a function from another function.

What are function attributes in python?

In python, functions too are objects. So they have attributes like other objects. All functions have a built-in attribute __doc__, which returns the doc string defined in the function source code. We can also assign new attributes to them, as well as retrieve the values of those attributes.


1 Answers

If this line

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

is generating the error message

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

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

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.)

[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.]

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.

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)

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
like image 51
DSM Avatar answered Oct 11 '22 22:10

DSM