#python #numpy #normalization #array-broadcasting
Вопрос:
У меня есть матрица функций, которую я хочу нормализовать по строкам.
Это то, что я сделал на основе минимального и максимального масштабирования, и я получаю ошибку. Может ли кто-нибудь помочь мне с этой ошибкой.
a = np.random.randint(10, size=(4,5))
s=a.max(axis=1) - a.min(axis=1)
np.amax(a,axis=1)
print(s)
(a - a.min(axis=1))/(a.max(axis=1) - a.min(axis=1))
>>[7 6 4 5]
4 print(s)
5
----> 6 (a - a.min(axis=1))/(a.max(axis=1) - a.min(axis=1))
ValueError: operands could not be broadcast together with shapes (4,5) (4,)
Ответ №1:
Попробуйте работать с транспонированной матрицей:
b = a.T
m = (b - b.min(axis=0)) / (b.max(axis=0) - b.min(axis=0))
m = m.T
>>> a
array([[2, 3, 2, 8, 3], # min=2 -> 0, max=8 -> 1
[3, 3, 9, 2, 1], # min=1 -> 0, max=9 -> 1
[1, 9, 8, 4, 7], # min=1 -> 0, max=9 -> 1
[6, 8, 7, 9, 4]]) # min=4 -> 0, max=9 -> 1
>>> m
array([[0. , 0.16666667, 0. , 1. , 0.16666667],
[0.25 , 0.25 , 1. , 0.125 , 0. ],
[0. , 1. , 0.875 , 0.375 , 0.75 ],
[0.4 , 0.8 , 0.6 , 1. , 0. ]])
Комментарии:
1. Если я использую транспонированную матрицу в качестве входных данных, какие изменения мне придется внести в свой модуль прямого распространения( обычная архитектура) для размещения с использованием транспонированной входной матрицы.Следует ли мне также транспонировать матрицу веса?
Ответ №2:
У меня есть альтернативное решение , я не уверен, что оно правильное.Было бы здорово, если бы кто — нибудь мог это прокомментировать.
def row_normalize(mf):
row_sums = np.array(mf.sum(1))
new_matrix = mf / row_sums[:, np.newaxis]
return new_matrix