【问题标题】:Matlab xlsread: force empty cells to be read as NaNMatlab xlsread:强制将空单元格读取为 NaN
【发布时间】:2019-12-18 16:14:40
【问题描述】:

我需要将 Excel 工作表上方形区域(10 x 10 单元格)的数据导入 Matlab。

该区域中的所有数据都是数字,但该区域的一些外部行和列是空的。

在 Matlab 中,我仍然希望在 Excel 中有空单元格的地方(也在外部行和列中)有一个 10 x 10 的双精度矩阵和 NaN。

如果我使用 xlsread,那么空的外部行和列会被自动截断。

不用说,一切都应该在不知道有多少空的外部行和列的情况下自动完成。

我该怎么做?

【问题讨论】:

  • 你检查xlsread的第二个输出参数了吗?
  • @Daniel,是的,它是空的。
  • 在 matlab 中心找到:num = xlsread(filename, 'range'); [m n] = 大小(数量); num(end+1,:) = nan(1,n);
  • @C.Colden 我认为您在末尾手动填充 num 附加行,但是如果您不知道需要附加多少外部额外的 NaN 行和列怎么办,因为一切都应该是自动的.
  • 我不完全理解您的问题。外行/列是什么意思。您能否编辑您的问题并添加一些示例?

标签: matlab io xlsread


【解决方案1】:

假设您的 10 x 10 电子表格的第一行和第一列以及最后一行和最后一列是空的(例如 this)。使用:

[num,txt,raw] = xlsread('myfile.xlsx',1,'A1:J10'); % Read input.

将返回:

num   8x8 double
txt   0x0 cell
raw   10x10 cell

num 中,非标量的前导行和列会被自动截断,而在txt 中,任何数值都会被省略。但是raw包含了所有的信息,所以可以用来提取数值:

raw(cellfun(@ischar,raw)) = {NaN}; % Set non-scalar values to missing.
A = cell2mat(raw); % Convert to matrix.

【讨论】:

  • 为什么没有以更用户友好的方式实现?如果我告诉 Matlab 像上面那样读取某个范围,它会假设我错了,事实上,它认为我的意思是 8x8 矩阵。我在 R、Python 或 Gams 的所有 excel 包中都没有发现这一点,我认为其他语言也是如此。如果我在 Matlab 文档中查找,我只看到: [num,txt,raw] = xlsread(__) 还返回单元格数组 txt 中的文本字段,以及数字和文本数据原始元胞数组,使用前面语法中的任何输入参数_。
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多