Matlab中7×13×19三维矩阵quiz1的标准差计算问题
三维矩阵全局标准差的正确计算方法
嘿,这个问题的核心是搞清楚两种计算方式到底在算什么,咱们一步步来拆解:
两种方法的本质差异
首先你的三维矩阵quiz1是7×13×19,总共有7×13×19=1729个元素。
方法1:展开矩阵后计算标准差
Quiz1 = reshape(quiz1, 1, 1729); STD = std(Quiz1)
或者更简洁的写法:
STD = std(quiz1(:))
这两种方式本质完全一致:把三维矩阵彻底展开成一维序列,然后计算这1729个元素的全局标准差——这才是你想要的“整个矩阵所有元素的标准差”。
方法2:嵌套std(std(std()))
S = std(std(std(quiz1)))
这个方法完全不是在计算全局元素的标准差,而是逐层按维度计算标准差后再取标准差,具体逻辑是:
- 第一次
std(quiz1):Matlab默认对第一个维度(行维度)计算标准差,得到一个1×13×19的矩阵,每个元素是原矩阵对应列(7行)的标准差; - 第二次
std(std(quiz1)):对上面的1×13×19矩阵,默认对第二个维度(列维度)计算标准差,得到1×1×19的矩阵,每个元素是前一步结果对应“列组”的标准差; - 第三次
std:对1×1×19的矩阵,对第三个维度计算标准差,最终得到一个标量。
这个标量是“列标准差的标准差的标准差”,和所有元素的全局标准差完全不是一回事,结果自然和方法1不同。
直观小例子验证
我们用一个简单的2×2×2矩阵来对比:
A = reshape(1:8, 2, 2, 2); % 元素是1-8,按维度排列
- 方法1计算全局标准差:
std(A(:)),结果约为2.2913,这是所有8个元素的真实标准差; - 方法2计算:
std(std(std(A))),结果是0——因为每一步计算的标准差数值都相同,再取标准差自然为0,和全局标准差天差地别。
结论
如果你需要计算三维矩阵中所有元素的标准差,正确的方法是用std(quiz1(:))或者reshape后计算std;嵌套std的方法是错误的,它的计算逻辑完全不符合你的需求。
内容的提问来源于stack exchange,提问作者Aime Torres
相关产品推荐
相关产品推荐

