Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于i=j,循环迭代得出rowsums=colsums_Python_R_Logic - Fatal编程技术网

Python 对于i=j,循环迭代得出rowsums=colsums

Python 对于i=j,循环迭代得出rowsums=colsums,python,r,logic,Python,R,Logic,很抱歉,我的问题会很罗嗦,因为我甚至不知道如何开始编写代码。伪代码的答案是高度赞赏的,如果只是让我了解如何解决这个问题(然后我可以写一些实际的代码,并回来寻求帮助,如果必要的话) 我的问题与其说是代码,不如说是理解我需要的逻辑(这可以说是编程中最难的部分) 对我的问题的一个非正式解释是,我想更改矩阵a(碰巧是稀疏的),使行和等于列和。我可以通过增加一个矩阵来实现这一点,其中S是一个尺度矩阵 形式上,我想找到一个S矩阵,这样(A+AS)ONESn=T和(T(A)+T(A)S)ONESn=T,其中O

很抱歉,我的问题会很罗嗦,因为我甚至不知道如何开始编写代码。伪代码的答案是高度赞赏的,如果只是让我了解如何解决这个问题(然后我可以写一些实际的代码,并回来寻求帮助,如果必要的话)

我的问题与其说是代码,不如说是理解我需要的逻辑(这可以说是编程中最难的部分)

对我的问题的一个非正式解释是,我想更改矩阵a(碰巧是稀疏的),使行和等于列和。我可以通过增加一个矩阵来实现这一点,其中S是一个尺度矩阵

形式上,我想找到一个S矩阵,这样(A+AS)ONESn=T和(T(A)+T(A)S)ONESn=T,其中ONESn是创建T的向量,行和向量

向量T是一成不变的,它是当前列和,是行和的目标

我想解决这个问题的方法是,对于每一行I和列j,其中I=j,我想找到行和,并计算它离目标有多远。然后我想更改该行的每个元素,使行和等于目标(或者至少是“足够接近”,在这里我可以设置“足够接近”)

但是,这取决于以下条件:第j列的总和也必须等于目标值

如何设计逻辑,使我可以从第1列和第1行开始,计算出第1行中的值,然后计算出第1列的值,前提是第1列的第一个条目通过前面的过程“固定”

接下来,第2行的第一个值应该通过上面的公式“固定”,同样,程序现在需要计算出第2列的前两个条目的固定值

依此类推,直到到达最后一列和最后一行

我曾经尝试过编写一个梯度下降程序,但是我一直坚持如何使列的梯度下降依赖于行的梯度下降

我也手工计算过(对于2x2矩阵),我可以找到答案,但我不确定我是如何做到的,这就是为什么我很难编写代码的原因

假设A是[1,2,3,4]的2x2矩阵。行和为[4,6]。列和为[3,7]

1 3  | 4 
2 4  | 6
___
3 7
如果我加上矩阵S=[1,0,-1,0]

1 -1
0  0
我得到A+S=[2,2,2,4],它有行和[4,6]

2 2  | 4 
2 4  | 6
___
4 6
预期结果是一个矩阵(a+AS),使得行和等于列和


或者一条错误消息说“不收敛”

您有一些矩阵A,需要添加另一个矩阵S,以便生成的矩阵M具有与列和相同的行和。这意味着:

A+S=M#对于M行和=列和

所以你需要做的是找到S,你可以简单地把等式改为

S=M-S

现在你可以为M设置任何行和列和相同的矩阵,得到S。一旦得到S,你就可以这样做

A+S=M

这意味着您可以将另一个矩阵S添加到每个矩阵中,以便生成的矩阵M的行和=列和。因此,您不会得到“矩阵不收敛”的消息

这是一个R码

A <- matrix(rnorm(4), ncol= 2)
M <- matrix(c(2,2,2,4), ncol= 2)
S <- M - A
rowSums(A+S) == colSums(A+S)
TRUE TRUE

A最好问一个问题-一个优点是它支持数学标记,这样你就可以更清楚地表达你想要的东西。如果你加入手工计算的例子,这会有所帮助。你正在做(A+S),但要求(A+AS)。我不明白。我遗漏了什么吗?矩阵A应该是一个正方形矩阵@如果A是可逆矩阵,可以从A+S'中得到A+AS。期望的结果可以是对角矩阵吗?这是行和等于列和的最简单的方法…A+s的列和和和和和和需要等于原始的列和(或行和和,Q不一致)。但这很容易解决<代码>M这是我不确定的,因为在问题的描述中OP要求A+S,但后来要求(A+AS)。谢谢你的评论。
row_col_num <- 5 # number of columns and rows
A <- matrix(rnorm(row_col_num *row_col_num ), ncol= row_col_num )
M <- matrix(rep(1, row_col_num *row_col_num ), ncol= row_col_num )
S <- M - A
rowSums(A+S) == colSums(A+S)
TRUE TRUE TRUE TRUE TRUE