openlang

只有一个时间间隔的那天合计不对(readmatrix?Apple silicon?)

一个给电表用的小 MATLAB 报表,每天一个 CSV,列是电表,行是 30 分钟的间隔。在 Neovim 终端里用 matlab -batch run_report 运行。财务今天就要,所以我心情不太好。

2026-10-30 有 3 个间隔,数字是对的。2026-10-31 只有一个间隔,网关大半天都挂了,内容如下,

M101,M102,M103,M104
0.44,0.30,1.05,0.05

这一天的总 kWh 打印出来是 [0.44 0.74 1.79 1.84]。费用也是同样的错法,从左到右越加越多。总量应该就是这一行里的四个数。peak_kwh 和 n_intervals 都是对的,所以只有总量这里不对劲。

function report = meter_report(deltas, cfg)
running = cumsum(deltas);
report.total_kwh   = running(end, :);
report.cost        = report.total_kwh * cfg.tariff;
report.peak_kwh    = max(deltas, [], 1);
report.n_intervals = size(deltas, 1);
end
batches{k} = readmatrix(fullfile(dataDir, names{k}));

size(batches{k}) 是 1x4,所以文件读取没问题。我怀疑 readmatrix 遇到表头加一行数据时有什么奇怪的行为(docs),或者是这个原生 Apple silicon 版本表现不一样。还没有人在别的机器上跑过。我试过 format long、重启 MATLAB、删掉表头,都没变化。

文件排序用的是标准库里的 natsortfiles,所以不是它的问题。

为什么只有这一天?代码一样,格式也一样。有人遇到过吗?

从英语翻译查看原文

后续讨论 1

顺着彼此的依据读下去
  1. 固定链接

    不是 readmatrix 的问题。1x4 的矩阵上 cumsum 是沿着列方向走的。一定要给出维度参数,

    total = sum(deltas, 1);
    从英语翻译查看原文

同一个问题的其他角度

  1. 把一小段 MATLAB 脚本移植到 R,结果有一个变成了矩阵

    大家好,第一次把东西从 MATLAB 移植过来(我几乎没碰过 MATLAB),所以请手下留情。我在把同事分析里的一小段脚本搬到 R,因为我们其余的流程都是 R。它能从头跑到尾,没有错误,也没有警告,但数字和他保存的日志对不上。 原始 .m 里相关的两…

    回复 2最近活动 rmatlab
  2. 冷柜读数为零却报告状态 "ok",我漏了什么

    我的夜间审计脚本(Rscript,base R)会标出峰值温度超过上限的冰柜。昨晚 U-03 的记录仪被拔掉了,所以导出文件里它的 temp_c 全是字符串 ERR。报告里 U-03 仍然显示 ok。没有人收到告警。打印出来的表里,这台设备的 n_v…

    回复 2最近活动 r
  3. 一个每次分配一列的循环

    Julia 里切片是会复制的,这我知道,结果在循环里又忘了。有个函数遍历矩阵的各列,对各列做 s += sum(A[:, j]),每个 j 一次。每个 A[:, j] 都会新建一个向量,求完和就扔掉。@time 显示分配量随列数增长,而性能提示里说,…

    回复 2最近活动 julia