Python提取数组节点编号对应nodes字典节点索引的实现方法
问题背景
需要从字典nodes中提取与数组I2存储的节点编号对应的节点坐标,原有实现逻辑错误,输出全为False,预期输出是编号对转换后的坐标数组。
原代码问题分析
- 原字典
nodes的存储结构是坐标为键、节点编号为值,原逻辑没有构建编号到坐标的反向映射,直接拿坐标值去匹配编号数组,无法得到对应结果 - 原判断逻辑
[i,i] in I2的匹配目标是两个元素完全相同的坐标对,和I2中存储的「两个不同节点组成的编号对」的结构、含义完全不匹配
正确实现方案
先构建节点编号到坐标的反向映射字典,再遍历I2中的每一组节点编号,替换为对应的坐标,最后转为numpy数组即可,完整代码如下:
import numpy as np nodes = {(0, 0): 1, (0, 1): 2, (1, 0): 3, (1, 1): 4} I2 = np.array([[1,2],[1,3],[2,4],[3,4]]) # 构建 节点编号:对应坐标 的反向映射 id2coord = {node_val: pos for pos, node_val in nodes.items()} # 逐对替换编号为坐标,生成目标数组 I3 = np.array([[id2coord[p1], id2coord[p2]] for p1, p2 in I2]) print("I3 =", I3)
运行输出
执行上述代码后,得到的结果和预期完全一致:
I3 = [[[0 0] [0 1]] [[0 0] [1 0]] [[0 1] [1 1]] [[1 0] [1 1]]]
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

