Итерирование и изменение значений столбцов матрицы пустышки Python - PullRequest
0 голосов
/ 10 октября 2019

У меня есть цифровая матрица, содержащая числа.

1,0,1,1
0,1,1,1
0,0,1,0
1,1,1,1

Я хотел бы выполнить нормализацию Z-счета для каждого столбца;z_Score [y] = (y-среднее (столбец)) / sqrt (var) y - каждый элемент в столбце, среднее значение - средняя функция, возведем в квадрат квадратную корневую функцию и изменим дисперсию.

Мой подходбыло следующее:

x_trainT = x_train.T #transpose the matrix to iterate over columns
for item in x_trainT:
    m = item.mean()
    var = np.sqrt(item.var())
    item = (item - m)/var
x_train = x_trainT.T

Я думал, что после итерации каждая строка доступна по ссылке (как, например, в списках c #), поэтому я могу изменять значения матрицы путем изменения значений строки.
Однако я был неправ, так как матрица сохраняет свои исходные значения без изменений.

Ваша помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Я бы рекомендовал вам избегать итераций, когда это возможно. Вы можете вычислить среднее значение и стандартное значение по столбцам.

>>> import numpy as np
>>> x_train = np.random.random((5, 8))
>>> norm_x_train = (x_train  - x_train.mean(axis=0)) / x_train.std(axis=0)
1 голос
/ 10 октября 2019

Вам, вероятно, придется проиндексировать номер строки:

x_trainT = x_train.T
for i in range(x_trainT.shape[0]):
    item = x_trainT[i]
    m = item.mean()
    sd = np.sqrt(item.var())
    x_trainT[i] = (item - m)/sd
x_trainT = x_train.T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...