从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)
它接近零,但从不总和为零=(
您要从自身中减去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,但这会让你接近。
我希望有所帮助!