2014-01-29 3 views
1

Я пытаюсь создать и построить случайных чисел с помощью:Plotting случайных чисел в Python

from numpy import random 
import matplotlib.pyplot as plt 

z = 15 + 2*random.randn(200) #200 elements, normal dist with mean = 15, sd = 2 

plt.plot(z) 
plt.show(z) 

График строится, но Python (2.7.5) зависает, и я получаю ошибку

Traceback (most recent call last): 
    File "G:\Stage 2 expt\e298\q1.py", line 25, in <module> 
    plt.show(z) 
    File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 145, in show 
    _show(*args, **kw) 
    File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 90, in  __call__ 
    if block: 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Это совершенно нормально, когда я делаю цикл так:

from numpy import random 
from pylab import plot,show 

yvec = [] # set up an empty vector 
for i in range(200): # want 200 numbers 
    yy = 25 + 3*random.randn() # normal dist with mean = 15, sd = 2 
    yvec.append(yy) # enter yy into vector 

plot(yvec) 
show(yvec) 

Может кто-то просьба уточнить?

+1

Разница в типе списка: явный цикл for использует встроенный список python, а 'random.randn' возвращает массив numpy. – miku

ответ

4

Функция pylab.show не принимает список или массив, он принимает необязательный логический (и, конечно, не ваш массив данных). Массив numpy в первом примере не может быть неявно преобразован в логическое, тем самым вызывая ошибку. Второй, однако, может быть преобразован в логическое, и он будет оцениваться до True, если он не пуст.

Чтобы исправить это, просто позвоните show без каких-либо аргументов.

Смежные вопросы