如何从Python加载的.mat文件中提取纯字符串?
提取.mat文件加载后嵌套数组中的纯字符串
嘿,这个问题我之前也碰到过!MATLAB的cell数组加载到Python里确实会变成这种嵌套的numpy数组结构,提取纯字符串其实很简单,给你几种实用的方法:
方法1:列表推导式 + 数组扁平化
这是最直观的方法,先把二维的featurenames数组扁平化,再逐个提取每个嵌套数组里的字符串:
import scipy.io data = scipy.io.loadmat(pathName) featurenames = data['featurenames'] # 提取纯字符串 pure_strings = [name[0] for name in featurenames.flatten()]
featurenames.flatten():把二维数组转换成一维数组,方便遍历每个嵌套的单元素数组name[0]:取出每个单元素数组里的字符串内容
针对你示例中的featurenames[0:2,0],可以直接这样处理:
subset_pure_strings = [arr[0] for arr in featurenames[0:2,0]] print(subset_pure_strings)
输出会是:
['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity', 'Intensity_SubsBlue_Nuclei_2_MeanIntensity']
方法2:使用numpy的.flat属性
.flat会返回数组的一维迭代器,用法和上面类似:
pure_strings = [item[0] for item in featurenames.flat]
方法3:批量转换(适合大规模数据)
如果你的featurenames规模较大,可以用numpy的向量化操作一次性提取:
pure_strings = featurenames.astype(str).flatten().tolist()
featurenames.astype(str):把整个数组的元素转换成字符串类型.flatten().tolist():扁平化后转成Python列表
为什么会出现这种嵌套结构?
这是因为MATLAB中的字符串cell数组,在scipy.io.loadmat加载后会被映射为二维numpy数组,每个元素是一个包含单个字符串的numpy数组——这是两种语言数据模型差异导致的,只要针对性提取就好啦~
内容的提问来源于stack exchange,提问作者MStikh
相关产品推荐
相关产品推荐

