Python中如何为节点编号分配指定值并生成3×3目标矩阵
实现方法
核心映射规则:
- 字典
nodes的键为目标矩阵T的行列坐标(行索引i, 列索引j) - 字典存储的节点编号从1开始计数,和数组
A的0-based索引偏移量为1,即编号为n的节点对应取值为A[n-1]
写法1:直观遍历实现(易读性高,适合小规模场景)
直接遍历nodes的键值对,逐位置填充矩阵即可:
import numpy as np nodes={(0, 0): 1, (0, 1): 2, (0, 2): 3, (1, 0): 4, (1, 1): 5, (1, 2): 6, (2, 0): 7, (2, 1): 8, (2, 2): 9} A=np.array([10,20,30,40,50,60,70,80,90]) # 初始化和A同数据类型的3*3空矩阵 T = np.zeros((3, 3), dtype=A.dtype) # 按映射规则填充值 for (i, j), node_num in nodes.items(): T[i, j] = A[node_num - 1]
写法2:Numpy向量化实现(性能更高,适合大规模节点场景)
无需显式for循环,批量提取坐标和编号后一次性赋值:
# 批量提取坐标、节点编号 coord_arr = np.array(list(nodes.keys())) node_id_arr = np.array(list(nodes.values())) T = np.zeros((3, 3), dtype=A.dtype) T[coord_arr[:, 0], coord_arr[:, 1]] = A[node_id_arr - 1]
运行上述任意一段代码,得到的T都和预期结果完全一致:
>>> print(T) [[10 20 30] [40 50 60] [70 80 90]]
生成的矩阵可以直接传入matplotlib的绘图函数(如plt.imshow()、plt.pcolormesh())使用,输出效果和参考图一致。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

