生成一个非对称 NxM 矩阵,其行和列的总和独立为 1

Generate an Asymmetric NxM matrix whose Rows and Columns Independently Sum to 1

给定一个 N 行 M 列的目标矩阵大小,是否可以选择所有行和列总和为 1 的值,条件是 矩阵是对角线上不对称?这是我在 N==M 时能够生成的目标矩阵(当 N!=M 时出现问题 - 见下文):

[[0.08345877 0.12844672 0.90911941 0.41964704 0.57709569]
 [0.53949086 0.07965491 0.62582134 0.48922244 0.38357809]
 [0.80619328 0.27581426 0.31312973 0.26855717 0.4540732 ]
 [0.11803505 0.88201276 0.1990759  0.2818701  0.63677383]
 [0.57058968 0.75183898 0.07062126 0.6584709  0.06624682]]

我正在用 numpy 写这个。目前我已经编写了以下(强力)代码,我知道它在 n==m 时有效。但是,如果n != m, rowwise 和columwise sums 不收敛到0,and rowwise sums 和columwise sums 的比率收敛到(n/m):

n,m = (5,4)
mat = np.random.random((n,m))
for i in range(100):
    s0 = mat.sum(0)
    s1 = mat.sum(1)[:,newaxis]
    mat = (mat/s0)
    mat = (mat/s1)
    if i%10 == 0:
        print(s0[0]/s1[0,0])

这种情况下的最终输出是 1.25(即 n/m,或 5/4)。我开始认为这在数学上可能是不可能的。有人可以证明我错了吗?

我怀疑你是对的,如果N != M 就无法解决问题。

以2x3矩阵为例:

[[a b c]
 [d e f]]

假设所有行和所有列的总和为 1 并显示矛盾。行总和为 1,因此:

a+b+c = 1
d+e+f = 1

这给出:

(a+b+c)+(d+e+f) = 1 + 1 = 2

现在查看列。每列的总和也为 1,因此我们有:

a+d = 1
b+e = 1
c+f = 1

组合三列等式得出:

(a+d)+(b+e)+(c+f) = 1 + 1 + 1 = 3

由于矩阵6个元素之和不能同时为2和3,2 != 3,原假设自相矛盾,故推翻。更一般地,问题无法解决 N != M with N rows M columns.

方阵N=M时矛盾消失