NumPy Inline 2D Манипуляции с массивами - PullRequest
0 голосов
/ 04 октября 2018

Как мы можем выполнить следующую операцию в одной строке только в numpy?

medians = np.median(x, axis=0)

for i in range(0, len(x)): # transforming input data to binary values
    for j in range(0, len(x[i])):
        x[i][j] = 1 if x[i][j] <= medians[j] else 2

Что он делает, чтобы преобразовать этот вектор признаков в двоичные значения на основе значений медианы для этого измерения данных.

1 Ответ

0 голосов
/ 04 октября 2018

Использовать широковещание:

x = (x <= np.median(x, axis=0))

Результатом будет логический массив нулей и единиц.Кстати, это не сработает, если вы попробуете это с axis=1, потому что трансляция соответствует осям справа.Вместо этого вам нужно было бы вставить заполнитель для уменьшенной оси, например, так:

x = (x <= np.median(x, axis=1)[..., np.newaxis])

Еще более общий подход был бы

x = (x <= np.median(x, axis=<whatever>, keepdims=True))

Поскольку логические значения технически являются подклассомцелые числа в Python, и numpy соблюдает это соглашение, вы можете получить маску с единицами и двойками вместо нулей и единиц, добавив единицу к результату, однако вы решите ее вычислить:

x = ... + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...