You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中提取Netlib .mat格式线性规划问题的矩阵与向量?

在Python中提取Netlib LP问题的矩阵与向量

步骤1:安装依赖库

先安装读取.mat文件所需的工具库:

pip install scipy numpy

步骤2:读取并提取核心数据

使用scipy.io.loadmat读取本地的.mat文件,再直接提取目标变量:

import scipy.io as sio
import numpy as np

# 读取lpi_bgprtr.mat文件
mat_data = sio.loadmat('lpi_bgprtr.mat')

# 先打印文件内的所有变量名,确认目标变量的位置
print("文件包含的变量:", mat_data.keys())

# 提取线性规划的核心变量
A = mat_data['A']
c = mat_data['c'].flatten()  # 转为一维向量,适配后续求解器输入要求
b = mat_data['b'].flatten()
lb = mat_data['lb'].flatten()
ub = mat_data['ub'].flatten()

# 验证提取结果的维度
print("\n提取结果维度:")
print(f"A: {A.shape}")
print(f"c: {c.shape}")
print(f"b: {b.shape}")
print(f"lb: {lb.shape}")
print(f"ub: {ub.shape}")

特殊情况处理

如果目标变量嵌套在Problem或lp这类结构体中,需要先提取结构体再获取变量:

# 假设变量嵌套在'Problem'结构体下
problem_struct = mat_data['Problem'][0, 0]  # scipy读取的结构体是二维数组,需取[0,0]获取实际内容
A = problem_struct['A']
c = problem_struct['c'].flatten()
# 其余变量按相同逻辑提取

额外说明

  • Netlib的LP问题中,矩阵A通常是稀疏矩阵,scipy.io.loadmat会自动将其读取为scipy.sparse类型,若需转为密集矩阵可调用A.toarray()。
  • 若变量名与示例不符,直接参考mat_data.keys()的输出结果调整键名即可。

内容的提问来源于stack exchange,提问作者Ali Shahmoradi Moghaddam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:36:20