Matlab中是否有能为矩阵断言提供更丰富反馈的简便函数?
Matlab矩阵断言的详细反馈实现方法
一、使用Matlab自带测试框架函数
Matlab的matlab.unittest.TestCase类中的verifyEqual方法可以提供类似numpy的详细断言反馈,适合测试场景使用:
import matlab.unittest.TestCase testCase = TestCase.forInteractiveUse; testCase.verifyEqual([1 2; 3 4], [1 2; 3 5]);
执行后会输出具体的差异位置和数值,示例输出如下:
Verification failed.
Framework Diagnostic:
verifyEqual failed.
--> The arrays are not equal.
--> Element at (2,2) is not equal.
--> Expected: 4
--> Actual: 5Actual Value:
1 2
3 4
Expected Value:
1 2
3 5
二、自定义断言实现详细反馈
如果不想依赖测试框架,也可以直接利用Matlab原生assert函数的错误信息参数,手动拼接矩阵内容:
方法1:直接在assert中构造错误信息
A = [1 2; 3 4]; B = [1 2; 3 5]; assert(isequal(A, B), '矩阵断言失败!\n期望矩阵:\n%s\n实际矩阵:\n%s', mat2str(A), mat2str(B));
执行后输出:
Assertion failed.
矩阵断言失败!
期望矩阵:
[1 2;3 4]
实际矩阵:
[1 2;3 5]
方法2:封装成自定义函数复用
可以写一个简单的工具函数,方便重复调用:
function assertEqual(expected, actual) if ~isequal(expected, actual) err_msg = sprintf('矩阵不匹配:\n期望:\n%s\n实际:\n%s', mat2str(expected), mat2str(actual)); assert(false, err_msg); end end
调用示例:
assertEqual([1 2; 3 4], [1 2; 3 5]);
输出和上面的直接调用一致,清晰展示两个矩阵的具体内容。
内容的提问来源于stack exchange,提问作者Finn Årup Nielsen
相关产品推荐
相关产品推荐

