Присвоение путем логического индексирования в numpy - PullRequest
0 голосов
/ 14 марта 2020

У меня есть действительный numpy массив размером (1000,). Все значения l ie между 0 и 1, и я хочу преобразовать это в категориальный массив. Все значения менее 0,25 должны быть отнесены к категории 0, значения от 0,25 до 0,5 для категории 1, от 0,5 до 0,75 для категории 2 и от 0,75 до 1 для категории 3. Логическая индексация не работает:

Y[Y < 0.25] = 0
Y[np.logical_and(Y >= 0.25, Y < 0.5)] = 1
Y[np.logical_and(Y >= 0.5, Y < 0.75)] = 2
Y[Y >= 0.75] = 3

Результат:

for i in range(4):
    print(f"Y == {i}: {sum(Y == i)}")

Y == 0: 206
Y == 1: 0
Y == 2: 0
Y == 3: 794

Что нужно сделать вместо этого?

1 Ответ

2 голосов
/ 14 марта 2020

Ошибка в логи конверсии c, а не в вашей индексации. Итоговая оценка:

Y[Y >= 0.75] = 3

Преобразует не только значения в диапазоне 0,75 - 1,00, но и предыдущие назначения для классов 1 и 2.

Вы можете изменить порядок назначений, начиная с класс 3.

Вы можете установить верхний предел для последнего класса, хотя у вас все еще есть проблема с 1,00 против класса 1.

Возможно, лучше всего было бы использовать регулярность ваших делений. , например:

Y = int(4*Y)    # but you still have boundary problems.
...