【问题标题】:How to access and standardize cell array elements (Matlab)如何访问和标准化元胞数组元素(Matlab)
【发布时间】:2019-02-23 01:52:06
【问题描述】:

我有一个元胞数组数据结构,我想标准化它的元素。如何将 zscore 或均值和标准应用于每个元胞数组?我尝试执行以下操作,但不正确。下面的代码随机生成 50 组不同的数据,每组 1000 个元素。我什至尝试了以下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);

【问题讨论】:

  • 你不能在循环中调用zscore吗?
  • zscore 应该用于向量。那么,您是否建议我将数据归一化x,然后将其传递到单元结构X

标签: matlab matrix cell mean


【解决方案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);

【讨论】:

  • 非常感谢您提供这两个选项。然而,匿名函数选项有效,zscore 选项:standardize = @(X)zscore(X,0,'all'); 抛出错误 Error using sum Invalid option. Option must be 'double', 'native', 'default', 'omitnan' or 'includenan'. Error in mean (line 116) y = sum(x, dim, flag) ./ size(x,dim); Error in zscore (line 43) mu = mean(x,dim); 是因为我的单元格数组结构不同吗?我有 100 组不同的一维数据。每个一维数据的长度为 1000 个样本。所以,X1x100 元胞数组结构。
  • 我将数据传递给for loop 内的X,如我的问题所示,这与您在答案中编写的语法不同。错误是由于定义单元结构的方式不匹配造成的吗?我正在使用 R2018
  • @RiaGeorge:我没有zscore 功能,所以我打算关闭文档。 'all' 模式似乎是 R2018b 的新模式,抱歉。
  • @RiaGeorge:你定义单元结构的方式是等价的,我只是喜欢以其他方式来做。 :)
  • 哦,我明白了。即使zscore 不起作用,我也可以使用另一个第一个选项。没事儿。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多