我有一个单元阵列数据结构,我想对其元素进行标准化。如何将zscore
或均值和标准差应用于每个单元格数组?我尝试执行以下操作,但这是不正确的。下面的代码随机生成1000个元素中的50个不同的数据集。我什至尝试了以下cellfun(@(x)(x-mu)./sg,X,'UniformOutput',false)
,但无法计算像元结构的mu
(平均值)和sg
(标准偏差)。请帮忙。
for n = 1: 50
x=rand(1,1000);
X(n)= {x} ;
end
XV = zscore(X);
答案 0 :(得分:1)
zscore
是统计工具箱中的一个功能,我没有。 documentation说,您可以使用'all'
选项(注意!这是MATLAB R2018b的新功能)将其应用于矩阵的标准化:
zscore(X,0,'all'); % won't work in versions of MATLAB before R2018b
如果像我一样,您没有此工具箱,则它应等效于:
(X - mean(X(:))) / std(X(:));
所以我们可以编写这样的匿名函数:
standardize = @(X)(X - mean(X(:))) / std(X(:));
或等效地
standardize = @(X)zscore(X,0,'all');
现在,您可以使用cellfun
将此函数应用于数组中的所有矩阵:
X = cell(5,3);
for ii=1:numel(X)
X{ii} = rand(1,1000);
end
XV = cellfun(standardize,X,'UniformOutput',false);