2015-01-02 3 views
7

मैं एनाकोंडा 2.1.0 वितरण के माध्यम से scipy और numpy का उपयोग कर रहा हूँ। मैं स्पाइडर का उपयोग अपने पायथन आईडीई के रूप में करता हूं।numpy और Scipy संकुल के मॉड्यूल/उप-पैकेज आयात करने में अंतर

जब मैं import scipy as sp चलाने के लिए, मैं sp.

के माध्यम से इस तरह के अनुकूलन, linalg, क्लस्टर आदि के रूप में सबपैकेज, उपयोग नहीं कर सकते लेकिन, जब मैं import numpy as np चलाने के लिए, मैं इस तरह के रूप में अपनी सभी सबपैकेज तक पहुँचने के लिए, सक्षम हूँ np के माध्यम से linalg, यादृच्छिक, matrixlib, बहुपद, परीक्षण, आदि।

क्या कोई कारण है कि दो आयात विभिन्न तरीकों से क्यों काम करते हैं? import scipy as sp क्यों 0 s38yके नामस्थान में सभी scipy subpackages पकड़ नहीं है?

+0

यह वास्तव में एक दिलचस्प सवाल है। मजेदार बात यह है कि 'sp. टाइपिंग' sp.optimize' के रूप में आयात करने के बाद आपको एक त्रुटि मिल जाएगी। लेकिन अगर आप 'scipy आयात अनुकूलन 'से करते हैं, तो अचानक' sp.optimize' आपको कोई त्रुटि नहीं देगा। यह समस्या एनाकोंडा के लिए विशिष्ट नहीं है। – cel

+2

@cel, आपको अब त्रुटि नहीं मिलती है क्योंकि जब आप 'scipy आयात अनुकूलन' से टाइप करते हैं, तो दुभाषिया को पता चलता है कि यह पहले से ही मुख्य पैकेज 'scipy' लोड कर चुका है, और यह पहले से ही 'ऑप्टिमाइज़' को सबमिट करेगा लोड मॉड्यूल पहचानकर्ता 'एसपी' उसी मॉड्यूल को इंगित कर रहा है जैसा कि अब 'अपडेट किया गया' है, ताकि आप अब पहचानकर्ता के माध्यम से सबमिशन 'ऑप्टिमाइज़' तक पहुंच सकें। – gg349

+0

@ gg349, ओह जो समझ में आता है - उसे नहीं पता था :) – cel

उत्तर

5

विभिन्न आयात व्यवहार की संभावना पाइथन भाषा के डिजाइन द्वारा होती है।

डिफ़ॉल्ट रूप से मॉड्यूल (*) का एक आयात विवरण केवल मुख्य मॉड्यूल आयात करता है, न कि submodules। मुख्य मॉड्यूल (numpy के मामले में) हो सकता है, या हो सकता है (जैसे scipy) कुछ या सभी submodules आयात करें।

इसके पीछे कारण scipy द्वारा उदाहरण दिया गया है: ज्यादातर मामलों में, आपको scipy पैकेज का केवल एक सबमिशन चाहिए। यह डिफ़ॉल्ट व्यवहार आपके कोड के लिए अनावश्यक हैं जो submodules लोड करने पर दुभाषिया लटका नहीं होगा।

संपादित करें: सूचना है कि numpy डिफ़ॉल्ट सभी submodules से आयात नहीं करता है, उदाहरण के लिए यह numpy.f2py लोड नहीं करता है, अधिक जानकारी के लिए THIS प्रश्न/उत्तर देखें।

(*) यहां मेरा मतलब है आयात आयात विवरण import scipy या import scipy as sp, जहां एक मॉड्यूल लोड होता है। बेशक अगर आप import scipy.optimize लिखते हैं तो पाइथन पहले मुख्य मॉड्यूल लोड करेगा, और फिर सबमिशन।

+0

धन्यवाद। तो, उपयोगकर्ता किसी भी पहचानकर्ता के तहत किसी भी मॉड्यूल के लिए सभी submodules लोड करने के लिए एक सरल अभिव्यक्ति क्या होगी? – user3317287

+0

निश्चित रूप से एक तरीका है, लेकिन यह एक बुरा विचार है। बस आपको आवश्यक मॉड्यूल आयात करें। मैं कहूंगा कि यदि आप पहले से नहीं जानते हैं कि आपको एक निश्चित मॉड्यूल से कौन सी सबमिड्यूल की आवश्यकता होगी, तो आपको एक बड़ी समस्या है, इस अर्थ में कि आप नहीं जानते कि आप क्या कर रहे हैं – gg349

+0

आपको रुचि हो सकती है [ यह] (http://stackoverflow.com/questions/1707709/list-all-the-modules-that-are-part-of-a-python-package) प्रश्न हालांकि – gg349

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