Разбить массив на данные, основываясь на бинах, возвращаемых гистограммой - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть массив x с такими данными: [3.1, 3.0, 3.3, 3.5, 3.8, 3.75, 4.0] и т. Д. У меня есть другая переменная y с соответствующими 0 и 1 с [0, 1, 0] Я хочу получить из этих новых отдельных массивов разделенное

freq, bins = np.histogram(X, 5)

, которое позволит мне узнать срезы для каждого бина.Но как мне получить эти данные?Например, если у меня есть два контейнера (от 3 до 3,5 и от 3,5 до 4), я хочу, чтобы два получили взамен два массива, как это [3.1, 3.2, 3.4, ...] и [3.6, 3.7, 4, ...].Кроме того, я хочу, чтобы переменная y была разбита и отсортирована таким же образом.

Сводка : я ищу код для разбивки x на ячейки с соответствующими yценности.

Я думал о том, чтобы что-то сделать с помощью переменной bins, но я не уверен, как разделить данные по отсечкам.Я ценю любую помощь.

Если я строю нормальную гистограмму X, я получаю это: enter image description here

Используя код:

d=plt.hist(X, 5, facecolor='blue', alpha=0.5)

Рабочий код:

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


def getLists(a, b, bin_obj):
    index_list = []
    for left, right in pairwise(bin_obj):
        indices = np.where((a >= left) & (a < right))
        index_list += [indices[0]]
    X_ret = [a[i] for i in index_list]
    Y_ret = [b[i] for i in index_list]
    return (X_ret, Y_ret)
freq, bins = np.histogram(X[:, 0], 5)

Xnew, Ynew = getLists(X[:, 0], Y, bins)

1 Ответ

0 голосов
/ 18 декабря 2018

В стандартной библиотеке есть несколько функций Python , определенных .

from itertools import tee

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

Это может помочь вам перебрать ваши бины и получить индексы ваших элементов.

for left, right in pairwise(bins):
    indices = np.where((x >= left) & (x < right))
    print(x[indices], y[indices])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...