2013-03-20 15 views
9

नोटिस: मैंने डुप्लिकेट की जांच की है और कुछ भी मेरे प्रश्न का स्पष्ट रूप से उत्तर नहीं देता है। मुझे भरोसा है कि अगर मुझे कुछ याद आया तो आप मुझे बताएंगे!SciPy/NumPy आयात दिशानिर्देश

मेरा कोड साफ़ करने के प्रयास में, मैं अपने कार्यक्रमों में विज्ञान और न्यूमपी आयात करने के लिए एक मानक सम्मेलन की तलाश में हूं। मुझे पता है कि कोई सख्त दिशानिर्देश नहीं है और मैं इसे जिस तरह से चाहता हूं, कर सकता हूं, लेकिन समय-समय पर, मुझे अभी भी विरोधाभासी निर्देश मिलते हैं।

उदाहरण के लिए, मैंने कहीं पढ़ा है कि NumPy केवल सरणी वस्तु को लागू करने के लिए है, जबकि SciPy हर दूसरे वैज्ञानिक एल्गोरिदम के लिए है। तो NumPy का उपयोग सरणी ऑपरेशन और साइपी के लिए अन्य सभी चीज़ों के लिए किया जाना चाहिए ... दूसरी तरफ, साइपी अपने मुख्य नामस्थान में प्रत्येक नम्पी फ़ंक्शंस आयात करता है, जैसे कि scipy.array()numpy.array() (see this question) जैसा ही है, इसलिए NumPy केवल होना चाहिए जब साइपी का उपयोग नहीं किया जा रहा है, क्योंकि उनका उपयोग नहीं किया जा रहा है ...

SciPy और NumPy के साथ काम करने का अनुशंसित तरीका क्या है? एक वैज्ञानिक होने के नाते, sqrt(-1) को एक जटिल संख्या वापस करनी चाहिए, इसलिए मैं केवल SciPy के साथ जाने के इच्छुक हूं।

import numpy as np 
from scipy import * 
from matplotlib import pyplot as plt 

मैं सरणी निर्माण/संचालन (जैसे np.zeros() के रूप में) के लिए (जैसे log10() के रूप में) गणितीय आपरेशन के लिए scipy और numpy का उपयोग करें:

अभी, मेरे कोड के साथ शुरू होता है। क्या साइपी के साथ सभी तरह से जाना ठीक होगा और कभी स्पष्ट रूप से NumPy आयात नहीं करेगा? क्या भविष्य के अपडेट में SciPy से NumPy के सरणी हेरफेर को हटा दिया जाएगा?

+3

मैं उन कार्यों के उन प्रकारों को सीधे 'numpy.lib.scimath' से प्राप्त करने की अनुशंसा करता हूं, जहां उन्हें परिभाषित किया जाता है, बजाय scipy से। –

उत्तर

5

मैं की तरह

import numpy as np 
import scipy as sp 
बजाय

कुछ कर रही सलाह देते हैं। from ... import * करना विशेष रूप से numpy और scipy जैसे बड़े मॉड्यूल के साथ करना हमेशा खतरनाक होता है। निम्नलिखित बताते हैं कि क्यों:

>>> any(['foo']) 
True 
>>> from scipy import * 
>>> any(['foo']) 

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    any(['foo']) 
    File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 1575, in any 
    return _wrapit(a, 'any', axis, out) 
    File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 37, in _wrapit 
    result = getattr(asarray(obj),method)(*args, **kwds) 
TypeError: cannot perform reduce with flexible type 

यहां क्या होता है? मानक पायथन बिल्टिन फ़ंक्शन any को scipy.any द्वारा प्रतिस्थापित किया गया है जिसमें अलग-अलग व्यवहार हैं। यह मानक any का उपयोग करने वाले किसी भी कोड को तोड़ सकता है।

+0

मुझे 'आयात ... आयात * का खतरा मिलता है, लेकिन दोनों scipy और numpy आयात करना अनावश्यक है, क्योंकि numpy scipy में शामिल है, और वैज्ञानिक कंप्यूटिंग के लिए scipy बेहतर है। – PhilMacKay

+0

फिर बस 'scipy' आयात करें, लेकिन' scipy import * से 'न करें। – user763305

+0

मैंने आपके उत्तर का चयन किया, क्योंकि इसमें जोड़ने के लिए और कुछ भी नहीं है। मेरे मामले में, चूंकि मैं हर समय वैज्ञानिक कंप्यूटिंग करता हूं, इसलिए मैंने केवल 'आयात scipy के रूप में sp' का उपयोग करके परीक्षण किया है, और सब कुछ के लिए' sp.stuff' का उपयोग करें। अधिक सामान्य कंप्यूटिंग पर्यावरण में, जहां scipy की आवश्यकता नहीं है, मुझे लगता है कि numpy जाने का रास्ता होगा। मैं ऐसी स्थिति के बारे में नहीं सोच सकता जहां दोनों को एक ही समय में डब्ल्यूबी की आवश्यकता होती है। – PhilMacKay

0

के बारे में कक्षाएं बनाने क्या है और उपयोग सिर्फ तुम क्या जरूरत है, fx: वर्ग एक:

import cv2 
from SIGBWindows import SIGBWindows 
from SIGBAssg import * 

वर्ग दो:

import cv2 
import numpy as np 

from pylab import * 
from scipy.cluster.vq import * 
from scipy.misc import imresize 

वर्ग तीन:

import cv2 
import numpy as np 

और अंत में जहां हम ऑब्जेक्ट को कॉल करते हैं:

import cv2 
from SIGBWindows import SIGBWindows 
from SIGBAssg import * 

windows = SIGBWindows(mode="video") 
windows.openVideo("somevideo.avi") 
kmeans(windows) 

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

+0

उम, आप किस सवाल का जवाब दे रहे हैं? – MattDMo

+0

हम्म ... यह काफी नहीं है जो मैं ढूंढ रहा हूं। मेरा मुख्य लक्ष्य कोड को जितना संभव हो सके पढ़ने और सरल करना आसान होगा, क्योंकि मैं किसी और को (या खुद को एक वर्ष में) चाहता हूं ताकि आसानी से मेरे एल्गोरिदम को समझ सकें। – PhilMacKay

+0

हाँ मैं आपको लगता है कि में का पालन करें, लेकिन जब से सरणी के दोनों तरह छवियों प्रसंस्करण के लिए की जरूरत है, मुझे लगता है कि यह इस तरह से कर रही है पढ़ने के लिए कोड और अधिक आसान बनाने के लिए सबसे आसान तरीका है। – jycr753

1

इस पोस्ट में दो मॉड्यूल (Relationship between scipy and numpy) के बारे में कुछ अच्छी जानकारी है। ऐसा लगता है कि Numpy की कार्यक्षमता पूरी तरह से Scipy के भीतर शामिल करने के लिए है, हालांकि कुछ अपवाद हैं (पोस्ट देखें)।मैं कहूंगा कि आपकी सभी जरूरतों के लिए बस सिस्पी का उपयोग करना सुरक्षित है क्योंकि गणितीय कार्यों, सरणी, और अन्य चीजों जैसी सबसे महत्वपूर्ण चीजें सिसि के भीतर शामिल हैं।

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