0

我已将我的训练数据矩阵转换为每列的z分数。我有musigma的输出中的每一列zscore

我还有另一个矩阵(我的测试数据),我想使用在前面的步骤中获得的和将其转换为z分数。我的实现使用如下所示的循环:musigmafor

TEST_DATA = zeros(num_rows,num_cols,'double');

for rowIdx = 1:num_rows,
    for colIdx = 1:num_cols,
        TEST_DATA(rowIdx,colIdx)=(input(rowIdx,colIdx)-MU(colIdx))/SIGMA(colIdx);
    end
end

有没有更快的方法在 MATLAB 中实现这一点?

4

2 回答 2

2

您可以使用bsxfun

%// Sample data
matrix = rand(10, 10);
testData = rand(10, 10); 

%// Obtain mu and sigma
mu = mean(matrix, 1);
sigma = std(matrix, [], 1);
%// or use: [Z, mu, sigma] = zscore(matrix);

%// Convert into z-scores using precalculated mu and sigma
C = bsxfun(@rdivide, bsxfun(@minus, testData, mu), sigma);
于 2013-09-11T14:57:10.233 回答
0

zscore 的文档解释说它只是减去平均值并除以标准偏差。唯一棘手的部分是将 mu/sigma 的向量应用于每一列。但是,如果您不知道如何使用花哨的方式,请使用 for 循环。为了便于阅读,我将保持这种方式。如果您需要更快,请查看bsxfun.

for ii=1:size(mat,1)
    mat(ii,:) = (mat(ii,:) - mu) ./ sigma;
end
于 2013-09-11T14:54:56.420 回答