2012-12-06 28 views
8

Ben:Bir dizi nasıl yapılır?

import numpy as np 
from mpmath import * 

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

Ama yapmama izin vermez:

TypeError: cannot create mpf from array 

Peki ben ne yapayım?

Esasen ben kullanacağım bu dizi var ve durum bağlı inanılmaz büyük veya inanılmaz az sayıda (örneğin 1.35626567e1084 veya 6.2345252e-2732) MPT için dolayısıyla gerek öğeye göre çarpma gidiyorum.

Özellikle, inanılmaz büyük ve inanılmaz küçük değerleri yaratan besseli ve besselk işlevini kullanacağım.

Bu numaraları tutmak için bir mpf dizisi nasıl alabilirim?

cevap

11

bir mpf sayısına göre bir dizi çarpımı sadece çalışır:

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 

öğeye göre mpf sayıları içeren iki dizi çarpımı da çalışır:

result * result 

Yani asıl sorunun, numm dizisindeki bir mpmath işlevinin nasıl değerlendirileceğidir. Bunu yapmak için np.frompyfunc kullanırdım (bir süre önce bu tek seçenek).

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

Çok teşekkür ederim. Ben sadece vazgeçmek ve döngüleri için yavaş kullanmak üzereydim! Bir süre önce bunun tek seçenek olduğunu söylemiştiniz, günümüzde diğer seçenekler neler? – Rapid

+3

@Rapid Hızlı bir google arama, hala tek yol olduğunu ima eder gibi görünüyor. Bu seçenek bu kadar basit olduğundan anlaşılabilir. – jorgeca

+0

Farklı bir ortamda aynı sorunu yaşıyorum ve gönderimi bu sayfaya bağladım. Herhangi bir yardım için minnettarım, – Allan

3

Kontrol dışarı mpmath.arange:

import numpy as np 
import mpmath as mp 

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

Hala bu 'A = np.array (arange (600))' 'BESSELI (0, A) takip yapamaz' o bana hatalarına yol açan olmadan? – Rapid