Matlab中数据集标准化时出现索引越界错误,求原因及解决
错误原因分析
核心问题1:循环维度完全错配
[n,p] = size(X)中,n是数据集的观测行数,p是变量列数。你要标准化的是每个变量(每一列),所以循环应该遍历列索引范围1:p,但代码里写的是for i = 1:n,相当于用观测行数去循环变量列,逻辑完全颠倒。
核心问题2:手动自增索引直接触发越界
循环里额外写了i = i + 1,会强制索引跳步:
- 第一次循环i初始为1,执行自增后变成2,访问
X(:,2)暂时没问题; - 随着循环推进,i会快速超过数据集的实际列数(报错提示列数最大为114),这时
X(:,i)就会触发"索引超出数组边界"的错误。
修正后的标准化代码段
LoadLargeDataSetGranese % standardize data [n,p] = size(X); % n=观测数, p=变量数 Xs = zeros(n,p); for i = 1:p % 遍历所有变量(列) Xs(:,i) = (X(:,i) - mean(X(:,i)))/std(X(:,i)); end
内容的提问来源于stack exchange,提问作者Carlos Barúa
相关产品推荐
相关产品推荐

