2016-03-12 9 views
1

Запуск следующий код:Python: np.vectorize вернуть «плавающем»

import matplotlib.pyplot as plt 
import numpy as np 

def xon (ton, t): 
    if ton <= t: 
     return (t-ton)/5 
    else: 
     return 0 

vxon = np.vectorize(xon) 
t = np.linspace(0, 49, 50)  
xontest = vxon(0, t) 
plt.plot(t, xontest, '-') 
plt.show() 

Я получаю сюжет: enter image description here

Но когда я пытаюсь построить для значений т, wchich отличаются чем ноль, например:

xontest = vxon(2, t) 

сюжет кажется округлить все значения XON в целое:

enter image description here

В чем мой код вызывает такое поведение?

+1

Если вы используете Python2, возможно, измените значение 'return (t-ton)/5' to' return (t-ton)/5.0'. – zondo

+1

Извините, посмотрел на неправильный номер. Это 2.7.9. – Tanja

+0

Я удалил свой ответ, потому что он был полностью внедорожник. В то время как '5' является целым числом,' t' не является целым числом в вашем случае. Скорее, это массив NumPy значений «numpy.float64» или аналогичный. (Возможно, это зависит от системы.) Таким образом, причуда Python 2 с целым делением-это-пол-деление не вступает в игру здесь. –

ответ

2

Обнаружена проблема. Линия

vxon = np.vectorize(xon) 

должен быть записан в виде

vxon = np.vectorize(xon, otypes=[np.float]) 

Спасибо, дас-г, показал мне, в каком направлении копать.