生成一个非对称 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时矛盾消失
给定一个 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时矛盾消失