从Creating a matrix of arbitrary size where rows sum to 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)
它接近于零但从不加零=(
答案 0 :(得分:0)
您要从自身中减去x的平均值以创建z,这将为您提供一个总和为0的矩阵。要使行的总和为零,您必须从其中的每个元素中减去一行的平均值。该行。
cols, rows = 5, 5
x = np.random.rand(rows, cols)
z = (x - np.average(x,axis=0)).T
此代码查找列的平均值并减去它们,因为从2D数组中减去1D数组时,将从每一行中减去1D数组。这样就得到了一个矩阵,其列的总和为零,因此转置得到了一个矩阵,其行的总和为零。
正如泰勒·陈(Tyler Chen)所述,由于舍入误差,您不会得到精确的0,但这会使您接近。
希望对您有帮助!