我已将每个列的训练数据矩阵转换为z-scores。我对zscore
的输出中的每列都有mu
和sigma
。
我还有另一个矩阵(我的测试数据),我想使用之前步骤中获得的mu
和sigma
将其转换为 z -scores。我的实现使用for
循环,如下所示:
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中有更快的方法吗?
答案 0 :(得分: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);
答案 1 :(得分:0)
zscore的文档解释说它只是减去均值并除以标准差。唯一棘手的部分是将mu / sigma的向量应用于每列。但是如果你不知道如何做这种奇特的方式,那就用for循环来做。为了便于阅读,我会这样离开。如果您需要更快,请查看bsxfun
。
for ii=1:size(mat,1)
mat(ii,:) = (mat(ii,:) - mu) ./ sigma;
end