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?
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.
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With