непрерывный в категориальный 2D массив

1

Я хочу преобразовать непрерывный 2D-массив numpy в категории на основе пороговых значений. Когда я использую функцию pandas cut я сначала должен flatten 1D-массив, а затем использовать cut, но результат не будет возвращаться обратно в 2D с функцией reshape numpy.

Вот простой пример:

import numpy as np
import pandas as pd

a = np.random.rand(2,3)
print(a)

b = a.flatten()
print(b)

c = pd.cut(b,(0,0.5,1),labels=[0,1])
print(c)

d = np.reshape(c,(2,3))
print(d)

Выход

[[ 0.56887807  0.1368459   0.34892358]
[ 0.77157277  0.64827644  0.42259086]]
[ 0.56887807  0.1368459   0.34892358  0.77157277  0.64827644  0.42259086]
[1, 0, 0, 1, 1, 0]
Categories (2, int64): [0 < 1]
[1, 0, 0, 1, 1, 0]
Categories (2, int64): [0 < 1]

Массив d остается 1D даже после команды reshape. Как я могу переделать его обратно в 2D?

Теги:
pandas
arrays
numpy

1 ответ

1
Лучший ответ

Если вы не привязаны к использованию Categorical функций pandas, вы можете просто использовать np.digitize для прямого преобразования 2D-массива в категориальные (целочисленные) значения:

Применяется к простому примеру:

c = np.digitize(a, bins=(0.5, 1))
print(c)
# [[1 0 0]
#  [1 1 0]]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню