如何使用lp.transport批量处理1000个14×8的成本矩阵?
处理大量运输问题矩阵的高效方案
核心思路:放弃动态变量名,用容器统一管理矩阵
不要用matrix_1到matrix_1000这种分散的变量名,把所有矩阵放到列表或字典里,通过循环批量处理——这是Python中批量处理同类数据的标准做法,比动态调用变量名更可靠、易维护。
步骤1:将现有矩阵收集到容器中
如果已经手动定义了matrix_1到matrix_1000,可以先把它们批量导入到列表:
# 把分散的matrix_1~matrix_1000存入列表 matrices = [] for i in range(1, 1001): # 通过globals()获取全局变量,仅用于应急迁移 matrices.append(globals()[f"matrix_{i}"])
注意:如果是自己生成矩阵,直接生成到列表里更高效,比如用列表推导式:
# 示例:生成1000个14×8的随机成本矩阵(替换成你的生成逻辑) import numpy as np matrices = [np.random.rand(14, 8) for _ in range(1000)]
步骤2:循环批量处理矩阵
假设lp.transport是处理单个成本矩阵并返回结果的函数,直接循环列表中的矩阵即可:
# 存储所有结果,用列表或字典均可 results = [] for idx, cost_matrix in enumerate(matrices, start=1): # 调用运输问题求解函数 transport_result = lp.transport(cost_matrix) # 将结果与矩阵编号绑定,方便后续排查 results.append({ "matrix_number": idx, "solution": transport_result }) # 如果需要按原变量名对应结果,用字典存储 results_dict = {} for i in range(1000): results_dict[f"matrix_{i+1}"] = lp.transport(matrices[i])
可选:添加异常处理
如果担心部分矩阵格式错误导致程序中断,可以加入异常捕获:
results = [] for idx, cost_matrix in enumerate(matrices, start=1): try: transport_result = lp.transport(cost_matrix) results.append({ "matrix_number": idx, "status": "success", "solution": transport_result }) except Exception as e: results.append({ "matrix_number": idx, "status": "failed", "error_message": str(e) })
为什么不推荐动态变量名?
用globals()或locals()动态获取变量名存在以下问题:
- 代码可读性差,其他开发者(甚至未来的你)很难理解变量来源
- 容易引发命名冲突,比如不小心覆盖了全局变量
- 调试困难,出现问题时无法快速定位变量异常
内容的提问来源于stack exchange,提问作者adrian
相关产品推荐
相关产品推荐

