Python中如何将HeatedSolid对象存入numpy数组并存储到字典?
问题分析与解决方案
核心问题点
- numpy数组类型不兼容:
np.zeros((10,10))默认生成数值型数组(如float64),无法存储自定义对象(HeatedSolid实例),必须显式指定对象类型。 - 字典键类型不匹配:
matrix_dict的键是整数10,但判断条件里用的是字符串"10",导致matrix[i,j] in matrix_dict.keys()永远不成立,赋值代码块从未执行。 - 变量名笔误:代码中
rod_params("multi")应为matrix_params["multi"],与前面定义的参数变量对应。
修正后的代码
import numpy as np import SubKit as sk # 假设matrix、X_position、Y_position已正确初始化 matrix = np.array([["10", "20"], ["30", "10"]]) # 示例二维数组 X_position = np.zeros((2,2)) # 示例位置数组 Y_position = np.zeros((2,2)) matrix_dict = { 10: {"multi": "69"}, 20: {"multi": "59"}, 30: {"multi": "49"} } # 创建支持存储对象的numpy数组 array = np.zeros((10, 10), dtype=object) # 高效遍历多维数组索引 for i, j in np.ndindex(matrix.shape): # 转换类型匹配字典键 val = int(matrix[i,j]) if val in matrix_dict: matrix_params = matrix_dict[val] array[i][j] = sk.HeatedSolid( x=X_position[i][j], y=Y_position[i][j], symtype=1, mult=matrix_params["multi"], power=1 ) print(array)
修正说明
- 数组创建时添加
dtype=object,允许存储任意Python对象; - 将
matrix元素转为整数,匹配字典的整数键,确保条件分支能进入; - 修正变量名笔误,正确引用参数字典中的值;
- 使用
np.ndindex遍历多维数组索引,比嵌套range循环更简洁高效。
内容的提问来源于stack exchange,提问作者user23622626
相关产品推荐
相关产品推荐

