Создание матрицы произвольного размера, где сумма строк равна 0
От создания матрицы произвольного размера, где сумма строк равна 1? мы можем просто нормализовать значения, разделив каждое значение в матрице на сумму всех значений, чтобы убедиться, что оно равно 1.
Например:
cols, rows = 5, 5
matrix = np.random.rand(rows, cols)
matrix/matrix.sum(axis=1)[:,None]
Как создать матрицу произвольного размера, где сумма строк равна 0?
Я пробовал:
cols, rows = 5, 5
x = np.random.rand(rows, cols)
z = x - sum(sum(x)) / (rows*cols)
Идет к числу, близкому к нулю, но никогда не суммирует ноль =(
1 ответ
Вы вычитаете среднее значение x из себя, чтобы создать z, что даст вам матрицу с суммой, равной 0. Чтобы привести строки к нулю, вы должны вычесть среднее значение строки из каждого элемента в этой строке.
cols, rows = 5, 5
x = np.random.rand(rows, cols)
z = (x - np.average(x,axis=0)).T
Этот код находит среднее значение столбцов и вычитает их, как при вычитании 1D массива из 2D массива, 1D массив будет вычитаться из каждой строки. Это дает матрицу, у которой столбцы суммируются с нулем, и, таким образом, транспонирование дает матрицу, у которой строки суммируются с нулем.
Как сказал Тайлер Чен, вы не получите точно 0 из-за ошибки округления, но это приблизит вас.
Надеюсь, это поможет!