Nice solution that looks pretty nifty but it actually produces an unsafe result, just like Matlab's own zscore. It passed on it's first run trough the test suite but fails on some number of repeats. I've now added a second pass with a know random seed.
Test | Status | Code Input and Output |
---|---|---|
1 | Pass |
%%
m = 100;
n = 10;
x = rand(m,n);
k = false(1,n);
k(randi(n,1,3)) = true;
x(:,k) = rand;
tol = 1.0e-12;
out = zscore(x);
assert(isstruct(out),'Struct test failed.')
assert(isfield(out,'Z'),'Z field test failed.')
assert(isfield(out,'Mu'),'Mu field test failed.')
assert(isfield(out,'Sigma'),'Sigma field test failed.')
assert(isequal(size(x),size(out.Z)),'Z size test failed.')
assert(isequal(size(x(1,:)),size(out.Mu)),'Mu size test failed.')
assert(isequal(size(x(1,:)),size(out.Sigma)),'Sigma size test failed.')
assert(all(abs(mean(out.Z))<tol),'Mean test failed.')
assert(all(abs(std(out.Z(:,~k))-1)<tol),'STD test failed.')
assert(all(abs(std(out.Z(:,k)))<tol),'STD test for invariant data failed.')
assert(isequal(out.Mu,mean(x,1)),'Mean equality test failed.')
assert(isequal(out.Sigma,std(x,0,1)),'STD equality test failed.')
|
2 | Fail |
%% A second pass known to produce unsafe results with Matlab's zscore
m = 100;
n = 10;
rng(2000,'twister')
x = rand(m,n);
k = false(1,n);
k(randi(n,1,3)) = true;
x(:,k) = rand;
tol = 1.0e-12;
out = zscore(x);
assert(isstruct(out),'Struct test failed.')
assert(isfield(out,'Z'),'Z field test failed.')
assert(isfield(out,'Mu'),'Mu field test failed.')
assert(isfield(out,'Sigma'),'Sigma field test failed.')
assert(isequal(size(x),size(out.Z)),'Z size test failed.')
assert(isequal(size(x(1,:)),size(out.Mu)),'Mu size test failed.')
assert(isequal(size(x(1,:)),size(out.Sigma)),'Sigma size test failed.')
assert(all(abs(mean(out.Z))<tol),'Mean test failed.')
assert(all(abs(std(out.Z(:,~k))-1)<tol),'STD test failed.')
assert(all(abs(std(out.Z(:,k)))<tol),'STD test for invariant data failed.')
assert(isequal(out.Mu,mean(x,1)),'Mean equality test failed.')
assert(isequal(out.Sigma,std(x,0,1)),'STD equality test failed.')
Error: Mean test failed.
|
4103 Solvers
35 Solvers
Poker Series 01: isStraightFlush
92 Solvers
153 Solvers
Create One Large Eye of size N x N Quickly?
70 Solvers