Error using sumInvalid option.

博主分享了在MATLAB中使用求和运算遇到的问题,即在个人电脑上正常运行的代码在服务器环境下因不支持'all'选项导致报错。通过将原代码的'sum'函数改为两层'sum'并添加归一化操作,成功解决了问题。此解决方案同样适用于'mean'函数。

matlab求和运算,在自己电脑上正常用,到了服务器上就报错。

Error using sum
Invalid option. Option must be 'double', 'native', 'default', 'omitnan' or 'includenan'.

原代码如下:

sum(conj(G(:, NpIdx)) .* y(:, NpIdx), 'all')

原因是我用了“all”,这个在服务器上不支持。必须用两层sum.改成:

sum(sum(conj(G(:, NpIdx)) .* y(:, NpIdx)))/sum(sum(abs(G(:, NpIdx)).^2));

成功解决!!!

问题适用于mean函数。

在你提供的 `InitServerLog` 函数中,日志输出到 `error.log` 的行为取决于底层日志库的实现逻辑(比如是否使用了 `logrus`, `zap`, 自定义的日志框架),但我们可以基于常见的日志实践和代码结构进行分析。 --- ### ✅ 回答问题:什么情况下会输出到 `error.log`? ```go func InitServerLog(option *LogOption) { infoFile := fmt.Sprintf("%s.info.log", option.LogName) errFile := fmt.Sprintf("%s.error.log", option.LogName) SetConfigurationHook(NewDefaultConfigurationHook(option.LogPath, infoFile, errFile)) } ``` 这段代码的作用是**初始化日志配置**,将日志按级别分离: - 一般信息(INFO、DEBUG 等)写入 `.info.log` - 错误信息(ERROR、FATAL、PANIC)写入 `.error.log` > **输出到 `error.log` 的条件是:日志条目的日志级别为 ERROR 以上(即 ERROR、WARN、FATAL、PANIC,具体取决于配置)** 但这不是由 `InitServerLog` 直接决定的,而是由以下两个部分共同作用的结果: 1. `NewDefaultConfigurationHook(...)` 的实现; 2. 日志库如何根据日志级别路由输出。 --- ### 🔍 常见实现原理(假设使用 Hook + 多输出) 很多 Go 日志库(如 `logrus`)支持“Hook”机制。例如: ```go type DefaultConfigurationHook struct { infoHandle *os.File errHandle *os.File } ``` 并在其 `Fire(entry *log.Entry)` 方法中判断: ```go if entry.Level >= logrus.ErrorLevel { fmt.Fprintf(h.errHandle, "%v\n", entry) } else { fmt.Fprintf(h.infoHandle, "%v\n", entry) } ``` 所以: ✅ **当调用 `log.Error(...)`, `log.Errorf(...)`, `log.Fatal(...)`, `log.Panic(...)` 时,就会触发输出到 `error.log` 文件。** --- ### 🧩 示例说明 假设你在其他地方写了如下代码: ```go log.Info("This goes to info.log only") log.Warn("This might go to both or only error.log — depends on config") log.Error("This goes to error.log") ``` 如果 `NewDefaultConfigurationHook` 配置的是: - `ErrorLevel` 及以上 → 写入 `errFile` - 所有级别 → 同时写入 `infoFile`(常见做法:info 包含所有,error 只包含错误) 则: | 调用方式 | 输出文件 | |----------------------|------------------------------| | `log.Info()` | `xxx.info.log` | | `log.Warn()` | 可能两者都有(看设计) | | `log.Error()` / `log.Fatal()` | `xxx.error.log` 和 `xxx.info.log` | 通常 **`.error.log` 是 `.info.log` 的子集**,只包含错误级别的日志。 --- ### ⚠️ 注意事项 - `SetConfigurationHook(...)` 是否真的实现了分级输出?需要查看 `NewDefaultConfigurationHook` 的源码。 - 如果没有正确设置 Hook 的 Level 过滤规则,可能所有日志都写进同一个文件。 - 文件路径拼接建议使用 `filepath.Join` 而非字符串拼接: ```go infoPath := filepath.Join(option.LogPath, infoFile) errPath := filepath.Join(option.LogPath, errFile) ``` --- ### ✅ 总结 > **会在以下情况输出到 `.error.log`:** > > - 使用了 `log.Error`, `log.Errorf`, `log.Fatal`, `log.Panic`, `log.Warn` 等函数(取决于配置); > - 日志级别 ≥ `ErrorLevel`; > - 日志 Hook 正确地将高优先级日志重定向到了 `errFile`; > - `NewDefaultConfigurationHook` 实现了基于级别的分路输出逻辑。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值