Matlab中mmread导入部分MatrixMarket文件失败,报错输出参数未赋值
解决Matlab mmread导入MTX文件时的"A未赋值"错误
我之前也碰到过mmread报这个错的情况,基本都是目标MTX文件的格式没严格遵循MatrixMarket的标准规范,和你能成功导入的那个文件存在格式差异。咱们一步步来排查解决:
1. 对比两个MTX文件的格式差异
mmread对MatrixMarket格式的要求非常严格,你可以先打开两个文件对比头部信息:
- 成功导入的GSM2396856对应的文件,头部应该是标准的MatrixMarket格式:
%%MatrixMarket matrix coordinate real general
% 注释内容(可选)
总行数 总列数 非零元素总数 - 而失败的GSE108699对应的文件,可能存在这些问题:
- 第一行的MatrixMarket标识拼写错误、大小写不符,或者数据类型(比如real/integer/pattern)不匹配
- 注释行没有用
%开头,或者头部有非注释的空行 - 第二行的行列数、非零元素数和文件实际的条目数量不一致
- 文件末尾存在多余的空行、无效字符
2. 手动修复文件格式
用文本编辑器打开失败的MTX文件,做这些调整:
- 确保第一行严格符合
%%MatrixMarket matrix [格式类型] [数据类型] [存储类型]的格式,比如实数稀疏矩阵就是%%MatrixMarket matrix coordinate real general - 所有注释行必须以
%开头,删除头部的无效空行 - 核对第二行的三个数字:数清楚文件里实际的非零元素条目数,确保和该行的第三个数值一致
- 删除文件末尾的多余空行或乱码内容
3. 尝试用Matlab自带的替代函数导入
如果手动修复还是不行,可以试试Matlab R2019a及以后版本自带的readmatrix或readsparse函数,它们对格式的兼容性比mmread更好:
% 导入为普通矩阵 temp = readmatrix('GSE108699对应的文件名.mtx.txt', 'CommentStyle', '%'); % 如果是稀疏矩阵,用这个更高效 temp = readsparse('GSE108699对应的文件名.mtx.txt', 'CommentStyle', '%');
4. 检查文件编码问题
有时候文件编码不是ASCII或UTF-8,也会导致mmread解析失败。你可以用文本编辑器把文件另存为ASCII编码,再尝试导入。
内容的提问来源于stack exchange,提问作者Code42
相关产品推荐
相关产品推荐

