Matlab转Python时list与matrix转换及等价实现问题
解决方案
1. 先补全依赖导入
你当前代码缺少必要的库导入声明,先补充避免运行异常:
import pandas as pd import numpy as np import numpy.random as npr import datetime as dt
2. 确认拼接结果维度
你使用np.hstack的逻辑本身是完全正确的:12次循环生成的数组列数分别为12、11……1,总和为78,每个数组都是5行,水平拼接后自然得到5行78列的数组,等价于Matlab的矩阵。
不要直接打印完整数组判断是否正确(长数组会默认截断显示,容易造成误解),直接打印维度校验即可:
z = np.hstack(lst_zUCorr) print(z.shape) # 输出为 (5, 78) 即符合要求
如果维度不符合,逐个校验列表内每个数组的形状定位问题:
for idx, arr in enumerate(lst_zUCorr): print(f"第{idx+1}次循环生成的数组形状:{arr.shape}") # 正常输出应为 (5,12)、(5,11)……(5,1)
3. 子集访问方法
得到的z是numpy的ndarray对象,使用逻辑和Matlab矩阵几乎一致,仅两个差异:
- 索引从0开始计数
- 索引用方括号
[]而非圆括号()
示例:
| 操作需求 | Matlab写法 | Python写法 |
|---|---|---|
| 取第3行第10列元素 | z(3,10) | z[2,9] |
| 取前3行所有列 | z(1:3,:) | z[:3,:] |
| 取所有行第5到第20列 | z(:,5:20) | z[:,4:20] |
无需额外编码即可直接进行各类矩阵运算。
可选:转换为Matlab风格的matrix对象
如果更习惯Matlab矩阵的操作逻辑,可以将ndarray转为numpy的matrix对象:
z_mat = np.matrix(z)
内容的提问来源于stack exchange,提问作者user3654852
相关产品推荐
相关产品推荐

