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

Python读取mat文件后,如何将数据转为一维字符串列表?

嘿,这个问题我之前处理Matlab转Python数据时也碰到过!本质是Matlab和Numpy在数组结构、字符串存储上的差异搞的鬼,我来给你拆解下:

问题根源

你加载的变量b是一个二维Numpy数组(形状为(1, 15))——因为Matlab里的1行15列矩阵,在scipy加载后会被映射成二维数组。当你直接调用.tolist()时:

  1. 二维数组会被转换成嵌套列表,外层列表对应数组的行(这里只有1行,所以外层是一个只有1个元素的列表)
  2. 内层的每个元素是Numpy的单元素字符串数组(比如array(['A'], dtype='<U13')),这是因为Matlab的字符串在scipy加载时会被包装成这种单元素数组结构

这就是你得到[[array(...), array(...), ...]]的原因。

解决办法

这里有几种简单的方式可以得到你想要的纯字符串列表:

方法1:展平数组 + 列表推导式提取字符串

先用ravel()把二维数组展平成一维,再遍历每个单元素数组提取里面的字符串:

import scipy.io as si

a = si.loadmat('matfilename')
b = a['variable']
# ravel()展平数组,elem是每个单元素字符串数组,取[0]拿到实际字符串
list1 = [elem[0] for elem in b.ravel()]

方法2:直接提取行 + 处理元素

因为你的数组只有1行,直接取第一行(b[0])得到一维数组,再逐个提取字符串:

list1 = [x[0] for x in b[0].tolist()]

方法3:转换为字符串数组后转列表

先把整个数组转换成字符串类型,再转列表后取第一行(因为原数组是1行):

list1 = b.astype(str).tolist()[0]

这三种方法都能输出你期望的['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']格式~

内容的提问来源于stack exchange,提问作者Mohsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:49