Python для выполнения цикла - PullRequest
1 голос
/ 15 мая 2019

`Улучшение производительности в цикле python 'for': мне нужно знать, как я могу решить, эффективен ли мой цикл или нет? Если он повторяет число циклов X, какое должно быть приемлемое время?

Я пытался создать функцию для создания таблицы распределения частот с помощью Python. У меня есть непрерывные данные в виде массива numpy, я хочу сделать интервалы класса и поместить каждый элемент в эти интервалы класса (я использую 'для цикла', чтобы сделать это). Я создал функцию, но я не уверен, эффективна ли моя функция.

def maketable(data,bins):
    data=np.array(data)
    edges=np.linspace(min(data),max(data),bins)  #creating classintervals
    classes={(edges[x],edges[x+1]):0 for x in range(bins-1)} #{tuple of classlimits:frequency}
    #for every value in data array we check if it falls in an interval(a bin) if yes,increment frequency 
    for val in data:
       for interval in classes.keys():
           if val>=interval[0] and val<=interval[1]:
              classes[interval]+=1
              break
    return(classes)

"Закончен" maketable "за 0,17328 с". Данные содержат 20 604 значения, и выполнение функции занимает 0,17 с. Я хочу знать, нормально ли это или нет. Я ценю любую помощь.

1 Ответ

0 голосов
/ 15 мая 2019

Таким образом, похоже, что вы на самом деле пытаетесь получить гистограмму некоторых данных. Ваша функция может быть реализована с помощью numpy с помощью:

classes, bins = np.histogram(data, bins=bins)

Тогда вы можете вернуть ваше classes имя.

...