2013-04-10 17 views
7

सबसे पहले, इन दोनों प्रश्नों को कितना स्पष्ट लगता है इसके लिए क्षमा करें; मैं इसके लिए बहुत नया हूं और मेरे पास कोई सुराग नहीं है जो मैं कर रहा हूं।पायथन 'विशेषताइरर:' फ़ंक्शन 'ऑब्जेक्ट में कोई विशेषता नहीं है' मिनट ''

मैं मूल्यों की एक सरणी के लिए स्पलीन इंटरपोलेशन के लिए 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' 

और अब तक आदि googling कुछ भी नहीं कर दिया गया है मैं समझता हूँ इसका क्या अर्थ है और मैं इसे कैसे ठीक करूं?

दूसरा प्रश्न: मैं एक बार में एक से अधिक कोड कोड कैसे इनपुट करूं? फिलहाल, अगर मैं पूरी चीज की प्रतिलिपि बनाने की कोशिश करता हूं और फिर इसे पीलाबैब में पेस्ट करता हूं, तो यह केवल मेरे कोड की शीर्ष पंक्ति इनपुट करता है, इसलिए मुझे एक ही समय में पूरी चीज को एक पंक्ति में पेस्ट करना होगा। मैं इसे कैसे प्राप्त करूं?

+3

केवल एक ही सवाल का सवाल है रखने के लिए प्रयास करें, अपने पहले (प्रोग्रामिंग) प्रश्न इस साइट पर स्वीकार्य है, तथापि, अपने दूसरे (गैर-प्रोग्रामिंग) प्रश्न के पास स्टैक ओवरफ्लो के साथ कुछ लेना देना नहीं है, और सुपरसुर पर पूछा जाना चाहिए। –

+0

यदि आप 'scipy.interpolate आयात interp1d' से करते हैं तो आप बस 'interp1d (...)' को कॉल कर सकते हैं। यदि आप _only_ को 'sp के रूप में scipy आयात करते हैं' तो आपको इसे 'sp.interpolate.interp1d (...) के रूप में कॉल करना होगा, आपको तब तक करने की आवश्यकता नहीं है, जब तक आप अकेले' interp1d (...) 'को कॉल नहीं करना चाहते साथ ही 'scipy'' 's.inyp 'से' scipy 'जैसे' scipy import इंटरप 'से स्पष्ट रूप से आयात किए बिना' scipy.interpolate आयात interp1d' से – askewchan

उत्तर

2

बदलें कि लाइन:

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

min और max सूचियों के गुण नहीं हैं, वे अपने स्वयं के कार्य हैं।

+0

धन्यवाद - तय किया गया है। अब मुझे 'TypeError:' function 'ऑब्जेक्ट इंटरैबल नहीं है'। –

+0

मुझे लगता है कि आप इसे 'x1' पर चलाना चाहते हैं क्योंकि मुझे यकीन नहीं है कि' x = var' का अर्थ क्या है। लेकिन 'x1' एक सूची है। –

-1

इंट के पास न्यूनतम() फ़ंक्शन नहीं है लेकिन न्यूनतम() एक अंतर्निहित फ़ंक्शन है। आपको न्यूनतम (x) का उपयोग करने की आवश्यकता होगी।

8

इस लाइन

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 पायथन में एक डिफ़ॉल्ट बिल्टिन नहीं है, लेकिन यदि यह एक फ़ंक्शन है, तो या तो आपने इसे किसी कारण से स्वयं परिभाषित कर दिया है या आपने इसे कहीं से चुना है (कहें कि आप ऋषि का उपयोग कर रहे हैं, या आपने स्टार आयात किया है from sympy import * या कुछ और की तरह)

[अद्यतन:। के बाद से आप कहते हैं कि तुम "PyLab का उपयोग कर", शायद varnumpy.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 
+0

शानदार - यह सब मुझे बिना किसी त्रुटि संदेश दिए ठीक में चला गया। एक्स = var के साथ मैं एक्स को एक चर में बनाने की कोशिश कर रहा था लेकिन यह वास्तव में शेष कोड के संबंध में कोई समझ नहीं लेता है, इसलिए मुझे यकीन नहीं है कि मैं ऐसा क्यों कर रहा था! बहुत बहुत धन्यवाद, बहुत सराहना की। –

1

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?

मान लिया जाये कि आप ipythonipython --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]: 
संबंधित मुद्दे

 संबंधित मुद्दे