通过使用以下脚本,我可以为每种矩阵类型获取连接类型的字典。我想在具有相似标题的新矩阵到来时更新值,如果标题不同,则在字典中添加该不同的标题。当第二个矩阵出现时,我无法获取值的更新:
对于以下矩阵:
0.0 2.0 1.0 1.0
2.0 0.0 1.0 1.0
1.0 1.0 0.0 1.0
1.0 1.0 1.0 0.0
以列表l作为矩阵标题
l = ['A', 'A', 'B', 'B']
它变成
A A B B
A 0.0 2.0 1.0 1.0
A 2.0 0.0 1.0 1.0
B 1.0 1.0 0.0 1.0
B 1.0 1.0 1.0 0.0
脚本
import collections
d = collections.defaultdict(dict)
for ix, iy in np.ndindex(matrix.shape):
i = 1
if int(matrix[ix][iy]) != 0:
elem = l[ix]
connection_index = matrix[ix][iy]
connection_key = l[iy]
if elm not in d[elm].keys():
if connection_index ==1:
d[elm][connection_key +"_corner"] = i
elif connection_index ==2:
d[elm][connection_key +"_edge"] = i
elif connection_index >=3:
d[elm][connection_key +"_face"] = i
print(d)
给予:
defaultdict(dict,
{'A': {'A_edge': 1, 'B_corner': 1},
'B': {'A_corner': 1, 'B_corner': 1}})
现在,当第二个矩阵出现与以前相同时,它应该是
defaultdict(dict,
{'A': {'A_edge': 2, 'B_corner': 2},
'B': {'A_corner': 2, 'B_corner': 2}})
但是我仍然得到
defaultdict(dict,
{'A': {'A_edge': 1, 'B_corner': 1},
'B': {'A_corner': 1, 'B_corner': 1}})
我知道的一件事是因为我需要更新'i',并在循环外进行尝试,但是没有用。
在这里,我们说矩阵元素为2时为edge,当其为1时为corner。例如,(A,A)在第一行中有2,因此我们说
{'A': {'A_edge': 1}}
任何人都可以帮助获得此更新结果吗?
谢谢。