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

问题描述 投票:0回答: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,则行和列总和不收敛到0,行和与列总和之比收敛到(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)。我开始认为这可能在数学上是不可能的。有人可以证明我错了吗?

python matrix random linear-algebra
1个回答
0
投票

我怀疑您是正确的,如果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

由于所有六个矩阵元素的总和不能同时为2和3,2 != 3,初始假设导致了矛盾,因此被证明。更一般而言,对于具有N行和M列的N!= M,无法解决该问题。

对于平方矩阵,当N = M时,矛盾消失。

© www.soinside.com 2019 - 2024. All rights reserved.