Создание матрицы произвольного размера, где сумма строк равна 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 из-за ошибки округления, но это приблизит вас.

Надеюсь, это поможет!

Другие вопросы по тегам