[英]How to find the position of repeated elements in a list, then sum those elements?
我想在指定的矩陣“ x”中找到列“ 1”和列“ 2”中重復元素的位置(矩陣“ x”的大小為nx3(“ n”是列之間的最大數目) “ 1”和列“ 2”,在下一個示例中是max(3,4)= 4)),然后在新矩陣“ z”(矩陣的主對角線(從1到n)中) “ z”的大小為“ n” x“ n”)將每列(值等於零的列除外)的值相加,並將相應的值放在對角線上。 這是矩陣“ x”的示例:
1 2 3
x= 1 [[1,2,4],
2 [1,3,2],
3 [2,3,1],
4 [3,4,5]]
矩陣“ z”是一個對稱矩陣,例如,元素z [1,2]等於z [2,1],元素z [1,3]等於z [3,1]。是矩陣“ z”的結構:
z= [[z[1],z[1 to 2],z[1 to 3],z[1 to 4]],
[z[2 to 1],z[2],z[2 to 3],z[2 to 4]],
[[z[3 to 1],z[3 to 2],z[3],z[3 to 4]],
[[z[4 to 1],z[4 to 2],z[4 to 3],z[4]]
對角主體中的元素(在此示例中為):
z[1]=z[1 to 2]+z[1 to 3]+z[1 to 4]
z[2]=z[2 to 1]+z[2 to 3]+z[2 to 4]
z[3]=z[3 to 1]+z[3 to 2]+z[3 to 4]
z[4]=z[4 to 1]+z[4 to 2]+z[4 to 3]
所需的矩陣(對於此示例)為:
z= [[4+2=6,4,2,0],
[4,4+1=5,1,0],
[2,1,2+1+5=8,5],
[0,0,5,5]]
注意:矩陣“ z”中的零表示其他數字之間是否沒有聯系。 在此示例中,數字“ 4”僅與數字“ 3”(值為5)有關。 那么數字4與數字1和數字2的連接為零。
謝謝。
如果引入圖論術語,您的問題將得到澄清。 您的x
可以認為是描述加權圖。 可以將類似於[1,3,2]
行解釋為描述連接節點1和節點3的權重2的邊的存在。矩陣z
包含以下信息:
1)對於每個節點i
,對應的對角線項是與i
入射的所有邊的權重之和。
2)對於每對不同的節點i
和j
,如果節點未連接,則z
的對應條目為0
如果它們連接,則連接i
和j
的邊的權重(如果存在多個,則權重之和)邊緣)。
有了這種解釋,事情就很容易了。 下面假設在節點x
開始1
。 請注意,即使圖形是基於1的,所得矩陣也是基於0的,因此要找到從節點2到節點3的權重,您將需要z[1][2]
:
def makeMatrix(edges):
n = max(max(edge[:2]) for edge in edges)
z = [[0]*n for i in range(n)]
for edge in edges:
i,j,w = edge
z[i-1][i-1] += w
z[j-1][j-1] += w
z[i-1][j-1] += w
z[j-1][i-1] += w
return z
以下有助於調試:
def pprint(matrix):
for row in matrix:
print(' '.join(str(i) for i in row))
例如,
>>> x = [[1,2,4],[1,3,2],[2,3,1],[3,4,5]]
>>> z = makeMatrix(x)
>>> pprint(z)
6 4 2 0
4 5 1 0
2 1 8 5
0 0 5 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.