2015-09-08 5 views
0

Я учусь численные вычисления в питоне и попытался следующий код, чтобы интегрировать функцию:Как создать Numpy массивы из списка чисел

import numpy as np 
import scipy.integrate as spi 

def integration(z): 
    if np.isscalar(z): 
     y, err = spi.quad(lambda x: 1/np.sqrt(1+x),0,z) 
     " spi.quad returns integrated value with error" 
     print y # result for scalar input 

    else: 
     for x in z: 
      y, err = spi.quad(lambda x: 1/np.sqrt(1+x),0,x) 
      print y # result for arrays 
    return 

Но результат я получаю не массив мне нужна массив для дальнейшие вычисления. Я получаю следующий результат:

z = np.linspace(0,1,10) 
>>> integration(z) 
0.0 
0.108185106779 
0.21108319357 
0.309401076759 
0.403700850309 
...... 

Любая помощь здесь как я должен изменить свой код, чтобы получить Numpy массиву

+0

Я не понимаю - вы хотите печатать так метить или что-то вернуть тому, кто называет «интеграцию»? –

+0

Удалить печать y. return y. А тогда mat = интегрирование (z); print mat –

ответ

0

Простой

import numpy as np 
import scipy.integrate as spi 

def integration(z): 
    if np.isscalar(z): z = np.asarray([z]) 
    y = np.empty_like(z) 
    for i in range(z.shape[0]): 
     y[i], err = spi.quad(lambda x: 1/np.sqrt(1+x),0,z[i]) 
    return y 

Тест:

>>> z = np.linspace(0,1,10) 
>>> intg_z = integration(z) 
>>> print intg_z 
[ 0.   0.10818511 0.21108319 0.30940108 0.40370085 0.49443826 
    0.5819889 0.66666667 0.74873708 0.82842712] 
+0

Все, что нужно после строки ':' в строке 5, и в строке 6. – gobrewers14

+0

Эта копия/вставленная, отлично работает на моем ноутбуке IPython – romeric

+0

Это бедная форма https://www.python.org/dev/peps/PEP-0008 / – gobrewers14