2012-12-06 16 views
8

मेरे पास है:एक सरणी mpf कैसे करें?

import numpy as np 
from mpmath import * 

mpf(np.array(range(0,600))) 

लेकिन यह मुझे ऐसा नहीं करने देना होगा:

TypeError: cannot create mpf from array 

तो मैं क्या कर किया जाना चाहिए?

अनिवार्य रूप से मैं उपयोग इस सरणी है और एक अविश्वसनीय रूप से बड़े या छोटे अविश्वसनीय परिस्थिति पर निर्भर करता है नंबर (जैसे 1.35626567e1084 या 6.2345252e-2732) इसलिए MPF की आवश्यकता के साथ तत्व के लिहाज से गुणा करने के लिए जा रहा हूँ।

अधिक विशेष रूप से मैं बेस्सेल और बेस्सेल फ़ंक्शन का उपयोग करूँगा जो अविश्वसनीय बड़े और अविश्वसनीय छोटे मूल्यों का निर्माण करेगा।

इन नंबरों को पकड़ने के लिए मुझे एक एमपीएफ सरणी कैसे मिल सकती है?

उत्तर

11

एक MPF संख्या से एक सरणी गुणा सिर्फ काम करता है:

import numpy as np 
import mpmath as mp 
small_number = mp.besseli(400, 2) # This is an mpf number 
# Note that creating a list using `range` and then converting it 
# to an array is not very efficient. Do this instead: 
A = np.arange(600) 
result = small_number * A # Array of dtype object, ie, it contains mpf numbeers 

दो MPF संख्या से युक्त सरणियों गुणा तत्व के लिहाज से भी काम करता है:

result * result 

तो आपकी असली समस्या यह है कि एक numpy सरणी में mpmath फ़ंक्शन का मूल्यांकन कैसे करें। ऐसा करने के लिए, मैं np.frompyfunc का उपयोग करूंगा (कुछ समय पहले यह एकमात्र विकल्प था)।

besseli_vec = np.frompyfunc(mp.besseli, 2, 1) 
besseli_vec(0, A) 
+0

आपको बहुत बहुत धन्यवाद। मैं बस छोड़ने और लूप के लिए सुस्त उपयोग करने वाला था! आपने उल्लेख किया कि यह कुछ समय पहले ही एकमात्र विकल्प था, आजकल अन्य विकल्प क्या हैं? – Rapid

+3

@ रैपिड एक त्वरित Google खोज का अर्थ यह है कि यह अभी भी एकमात्र तरीका है। यह समझ में आता है क्योंकि यह विकल्प इतना आसान है। – jorgeca

+0

मुझे एक अलग सेटिंग में एक ही समस्या है और मैंने अभी इस पोस्ट को अपनी पोस्ट से लिंक किया है। किसी भी मदद की सराहना करेंगे, – Allan

3

बाहर चेक mpmath.arange:

import numpy as np 
import mpmath as mp 

np.array(mp.arange(600)) 
+0

मैं अभी भी 'ए = एनपी.एरे (अरेंज (600))' के बाद 'बेस्सेल (0, ए)' नहीं कर सकता हूं, इसके बिना मुझे त्रुटियां फेंकने के बिना? – Rapid