как распечатать, когда новая запись установлена ​​(в массиве) с использованием случайных чисел - PullRequest
1 голос
/ 24 декабря 2011

Я сгенерировал график случайных чисел (стандартное отклонение 1, среднее значение 0). Мне нужно просмотреть список и распечатать каждый номер, если он самый большой на данный момент. Например, учитывая список [10, 5, 15, 18, 5, 7, 9, 100], код будет распечатан:

10 (first number is always going to be the biggest currently seen)
15
18
100

Вот мой код:

import pylab
a = pylab.arange(1.0, 129.05, 1)
xrandn = pylab.zeros(129, float)

for j in range(0, 129):
    xrandn[j] = pylab.randn()

pylab.plot(a, xrandn, "r-")
pylab.xlabel("Year")
pylab.ylabel("Units")
pylab.title("Possible Tempertaure Fluctuations")
pylab.show()

Кроме того, как дополнительно, как я могу отметить эти точки на самом графике?

Редактировать 1: спасибо за ваши ответы, теперь я застрял на следующем

Теперь мне нужно сгенерировать большое количество «наборов» случайных чисел, из которых мне нужно иметь возможность получить максимальное значение первого значения в каждом наборе, а затем иметь возможность доступа ко второму значению каждого набора, затем третий в каждом наборе и т. д., считающий количество значений, которые превышают предыдущий максимум. Я попытался создать матрицу, чтобы сделать это для меня, однако я продолжаю получать сообщение об ошибке, говорящее мне, что я не могу использовать плавающие числа в матрице, и теперь я не уверен, является ли это правильным методом или какая-то поправка к предыдущему код даст ответ.

import pylab

def make_list(size):
    """create a list of size number of zeros"""
    mylist = []
    for i in range(size):
        y = pylab.randn()
        mylist.append(y)
    return mylist

def make_matrix(rows, cols):
    """
    create a 2D matrix as a list of rows number of lists
    where the lists are cols in size
    resulting matrix contains zeros
    """
    matrix = []
    for i in range(rows):
        matrix.append(make_list(cols))
    return matrix

mx = make_matrix(10, 6)

print(mx)

Ответы [ 3 ]

1 голос
/ 25 декабря 2011

Самым простым подходом может быть построение отдельной кривой ступеньки для максимального пробега:

>>> def running_maximum(data):
        result = data[:1]
        for x in data[1:]:
            result.append(max(x, result[-1]))
        return result

>>> data = [10, 5, 15, 18, 5, 7, 9, 100]
>>> running_maximum(data)
[10, 10, 15, 18, 18, 18, 18, 100]
0 голосов
/ 25 декабря 2011

Эта функция распечатает все ваши рекордные максимумы и вернет их значения и индекс, в котором они находятся в массиве.

def print_current_max(data):
    m = data[0]
    print m # First point will always be the biggest one yet seen.
    highs = [(0, m)]
    for (i, x) in enumerate(data):
        if m < x:
            m = x
            print m
            highs.append((i, m))

    return highs

Затем вы можете построить все верхние точки следующим образом:

highs = print_current_max(data)
X = [x for (x, y) in highs]
Y = [y for (x, y) in highs]
pylab.plot(X, Y, 'o')
0 голосов
/ 25 декабря 2011

Так просто, как может быть

def foo(data):
    lastMax=[data[0]]
    for x in data[1:]:
        if x>lastMax[-1]:
            lastMax.append(x)
    return lastMax
...