From 9e75549a7756c00cd3a95791f07890f829f2b9cb Mon Sep 17 00:00:00 2001 From: tumaolin94 <524561223@qq.com> Date: Sat, 8 Aug 2015 13:07:05 +0800 Subject: [PATCH 1/2] Vectorize Vectorize the code --- machine-learning-ex1/gradientDescent.m | 6 +++--- machine-learning-ex2/costFunction.m | 10 ++-------- machine-learning-ex2/costFunctionReg.m | 8 +------- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/machine-learning-ex1/gradientDescent.m b/machine-learning-ex1/gradientDescent.m index 1891a08..84c1792 100644 --- a/machine-learning-ex1/gradientDescent.m +++ b/machine-learning-ex1/gradientDescent.m @@ -16,9 +16,9 @@ % Hint: While debugging, it can be useful to print out the values % of the cost function (computeCost) and gradient here. % - temp0 = theta(1) - alpha*sum(X*theta-y)/m; - temp1 = theta(2) - alpha*sum((X*theta-y).*X(:,2))/m; - theta = [temp0;temp1]; + + +theta=theta-alpha*X'*(X*theta-y)/m; % ============================================================ diff --git a/machine-learning-ex2/costFunction.m b/machine-learning-ex2/costFunction.m index 8fe9b14..b09a905 100644 --- a/machine-learning-ex2/costFunction.m +++ b/machine-learning-ex2/costFunction.m @@ -19,19 +19,13 @@ % % Note: grad should have the same dimensions as theta % -% for i=1:m - % hx = sigmoid(X(i,:)*theta); - % J = J + (-y(i)*log(hx)-(1-y(i))*log(1-hx)); -% end -% J = J/m; + %Vectorization hx = sigmoid(X*theta); J = sum(-y.*log(hx)-(1-y).*log(1-hx))/m; -for j=1:size(theta) - grad(j) = sum((hx-y).*X(:,j))/m; -end +grad=X'*(hx-y)/m; % ============================================================= diff --git a/machine-learning-ex2/costFunctionReg.m b/machine-learning-ex2/costFunctionReg.m index 50a918d..7816168 100644 --- a/machine-learning-ex2/costFunctionReg.m +++ b/machine-learning-ex2/costFunctionReg.m @@ -7,7 +7,6 @@ % Initialize some useful values m = length(y); % number of training examples n = length(theta); - % You need to return the following variables correctly J = 0; grad = zeros(size(theta)); @@ -17,17 +16,12 @@ % You should set J to the cost. % Compute the partial derivatives and set grad to the partial % derivatives of the cost w.r.t. each parameter in theta - -%Vectorization hx = sigmoid(X*theta); J = sum(-y.*log(hx)-(1-y).*log(1-hx))/m + lambda*sum(theta(2:n).^2)/(2*m); +grad=X'*(hx-y)/m + lambda*theta/m; grad(1) = sum((hx-y).*X(:,1))/m; -for j=2:n - grad(j) = sum((hx-y).*X(:,j))/m + lambda*theta(j)/m; -end - % ============================================================= end From 73dd79d851ee4156e2f992543453f1687eb0b825 Mon Sep 17 00:00:00 2001 From: tumaolin94 <524561223@qq.com> Date: Mon, 10 Aug 2015 13:01:20 +0800 Subject: [PATCH 2/2] ex3 homework of week 3 --- machine-learning-ex3/displayData.m | 59 ++ machine-learning-ex3/ex3.m | 69 +++ machine-learning-ex3/ex3.pdf | Bin 0 -> 293703 bytes machine-learning-ex3/ex3_nn.m | 88 +++ machine-learning-ex3/fmincg.m | 175 ++++++ machine-learning-ex3/lib/jsonlab/AUTHORS.txt | 41 ++ .../lib/jsonlab/ChangeLog.txt | 74 +++ .../lib/jsonlab/LICENSE_BSD.txt | 25 + machine-learning-ex3/lib/jsonlab/README.txt | 394 ++++++++++++ machine-learning-ex3/lib/jsonlab/jsonopt.m | 32 + machine-learning-ex3/lib/jsonlab/loadjson.m | 566 ++++++++++++++++++ machine-learning-ex3/lib/jsonlab/loadubjson.m | 528 ++++++++++++++++ .../lib/jsonlab/mergestruct.m | 33 + machine-learning-ex3/lib/jsonlab/savejson.m | 475 +++++++++++++++ machine-learning-ex3/lib/jsonlab/saveubjson.m | 504 ++++++++++++++++ .../lib/jsonlab/varargin2struct.m | 40 ++ machine-learning-ex3/lib/makeValidFieldName.m | 30 + .../lib/submitWithConfiguration.m | 125 ++++ machine-learning-ex3/lrCostFunction.m | 52 ++ machine-learning-ex3/oneVsAll.m | 76 +++ machine-learning-ex3/predict.m | 43 ++ machine-learning-ex3/predictOneVsAll.m | 42 ++ machine-learning-ex3/sigmoid.m | 6 + machine-learning-ex3/submit.m | 56 ++ 24 files changed, 3533 insertions(+) create mode 100644 machine-learning-ex3/displayData.m create mode 100644 machine-learning-ex3/ex3.m create mode 100644 machine-learning-ex3/ex3.pdf create mode 100644 machine-learning-ex3/ex3_nn.m create mode 100644 machine-learning-ex3/fmincg.m create mode 100644 machine-learning-ex3/lib/jsonlab/AUTHORS.txt create mode 100644 machine-learning-ex3/lib/jsonlab/ChangeLog.txt create mode 100644 machine-learning-ex3/lib/jsonlab/LICENSE_BSD.txt create mode 100644 machine-learning-ex3/lib/jsonlab/README.txt create mode 100644 machine-learning-ex3/lib/jsonlab/jsonopt.m create mode 100644 machine-learning-ex3/lib/jsonlab/loadjson.m create mode 100644 machine-learning-ex3/lib/jsonlab/loadubjson.m create mode 100644 machine-learning-ex3/lib/jsonlab/mergestruct.m create mode 100644 machine-learning-ex3/lib/jsonlab/savejson.m create mode 100644 machine-learning-ex3/lib/jsonlab/saveubjson.m create mode 100644 machine-learning-ex3/lib/jsonlab/varargin2struct.m create mode 100644 machine-learning-ex3/lib/makeValidFieldName.m create mode 100644 machine-learning-ex3/lib/submitWithConfiguration.m create mode 100644 machine-learning-ex3/lrCostFunction.m create mode 100644 machine-learning-ex3/oneVsAll.m create mode 100644 machine-learning-ex3/predict.m create mode 100644 machine-learning-ex3/predictOneVsAll.m create mode 100644 machine-learning-ex3/sigmoid.m create mode 100644 machine-learning-ex3/submit.m diff --git a/machine-learning-ex3/displayData.m b/machine-learning-ex3/displayData.m new file mode 100644 index 0000000..160697e --- /dev/null +++ b/machine-learning-ex3/displayData.m @@ -0,0 +1,59 @@ +function [h, display_array] = displayData(X, example_width) +%DISPLAYDATA Display 2D data in a nice grid +% [h, display_array] = DISPLAYDATA(X, example_width) displays 2D data +% stored in X in a nice grid. It returns the figure handle h and the +% displayed array if requested. + +% Set example_width automatically if not passed in +if ~exist('example_width', 'var') || isempty(example_width) + example_width = round(sqrt(size(X, 2))); +end + +% Gray Image +colormap(gray); + +% Compute rows, cols +[m n] = size(X); +example_height = (n / example_width); + +% Compute number of items to display +display_rows = floor(sqrt(m)); +display_cols = ceil(m / display_rows); + +% Between images padding +pad = 1; + +% Setup blank display +display_array = - ones(pad + display_rows * (example_height + pad), ... + pad + display_cols * (example_width + pad)); + +% Copy each example into a patch on the display array +curr_ex = 1; +for j = 1:display_rows + for i = 1:display_cols + if curr_ex > m, + break; + end + % Copy the patch + + % Get the max value of the patch + max_val = max(abs(X(curr_ex, :))); + display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ... + pad + (i - 1) * (example_width + pad) + (1:example_width)) = ... + reshape(X(curr_ex, :), example_height, example_width) / max_val; + curr_ex = curr_ex + 1; + end + if curr_ex > m, + break; + end +end + +% Display Image +h = imagesc(display_array, [-1 1]); + +% Do not show axis +axis image off + +drawnow; + +end diff --git a/machine-learning-ex3/ex3.m b/machine-learning-ex3/ex3.m new file mode 100644 index 0000000..da858ca --- /dev/null +++ b/machine-learning-ex3/ex3.m @@ -0,0 +1,69 @@ +%% Machine Learning Online Class - Exercise 3 | Part 1: One-vs-all + +% Instructions +% ------------ +% +% This file contains code that helps you get started on the +% linear exercise. You will need to complete the following functions +% in this exericse: +% +% lrCostFunction.m (logistic regression cost function) +% oneVsAll.m +% predictOneVsAll.m +% predict.m +% +% For this exercise, you will not need to change any code in this file, +% or any other files other than those mentioned above. +% + +%% Initialization +clear ; close all; clc + +%% Setup the parameters you will use for this part of the exercise +input_layer_size = 400; % 20x20 Input Images of Digits +num_labels = 10; % 10 labels, from 1 to 10 + % (note that we have mapped "0" to label 10) + +%% =========== Part 1: Loading and Visualizing Data ============= +% We start the exercise by first loading and visualizing the dataset. +% You will be working with a dataset that contains handwritten digits. +% + +% Load Training Data +fprintf('Loading and Visualizing Data ...\n') + +load('ex3data1.mat'); % training data stored in arrays X, y +m = size(X, 1); + +% Randomly select 100 data points to display +rand_indices = randperm(m); +sel = X(rand_indices(1:100), :); + +displayData(sel); + +fprintf('Program paused. Press enter to continue.\n'); +pause; + +%% ============ Part 2: Vectorize Logistic Regression ============ +% In this part of the exercise, you will reuse your logistic regression +% code from the last exercise. You task here is to make sure that your +% regularized logistic regression implementation is vectorized. After +% that, you will implement one-vs-all classification for the handwritten +% digit dataset. +% + +fprintf('\nTraining One-vs-All Logistic Regression...\n') + +lambda = 0.1; +[all_theta] = oneVsAll(X, y, num_labels, lambda); + +fprintf('Program paused. Press enter to continue.\n'); +pause; + + +%% ================ Part 3: Predict for One-Vs-All ================ +% After ... +pred = predictOneVsAll(all_theta, X); + +fprintf('\nTraining Set Accuracy: %f\n', mean(double(pred == y)) * 100); + diff --git a/machine-learning-ex3/ex3.pdf b/machine-learning-ex3/ex3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..93ad46a2e416be13a297ee1742d28dc16a1408c5 GIT binary patch literal 293703 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

SL(I}SIUFJOT)y!V$(W!So0`?=dL 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

*wyhE#0>kR99O! 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%0D-Szygvg1#2y$> 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 JvaSl?zW@X=b%Ou^ literal 0 HcmV?d00001 diff --git a/machine-learning-ex3/ex3_nn.m b/machine-learning-ex3/ex3_nn.m new file mode 100644 index 0000000..073bc4d --- /dev/null +++ b/machine-learning-ex3/ex3_nn.m @@ -0,0 +1,88 @@ +%% Machine Learning Online Class - Exercise 3 | Part 2: Neural Networks + +% Instructions +% ------------ +% +% This file contains code that helps you get started on the +% linear exercise. You will need to complete the following functions +% in this exericse: +% +% lrCostFunction.m (logistic regression cost function) +% oneVsAll.m +% predictOneVsAll.m +% predict.m +% +% For this exercise, you will not need to change any code in this file, +% or any other files other than those mentioned above. +% + +%% Initialization +clear ; close all; clc + +%% Setup the parameters you will use for this exercise +input_layer_size = 400; % 20x20 Input Images of Digits +hidden_layer_size = 25; % 25 hidden units +num_labels = 10; % 10 labels, from 1 to 10 + % (note that we have mapped "0" to label 10) + +%% =========== Part 1: Loading and Visualizing Data ============= +% We start the exercise by first loading and visualizing the dataset. +% You will be working with a dataset that contains handwritten digits. +% + +% Load Training Data +fprintf('Loading and Visualizing Data ...\n') + +load('ex3data1.mat'); +m = size(X, 1); + +% Randomly select 100 data points to display +sel = randperm(size(X, 1)); +sel = sel(1:100); + +displayData(X(sel, :)); + +fprintf('Program paused. Press enter to continue.\n'); +pause; + +%% ================ Part 2: Loading Pameters ================ +% In this part of the exercise, we load some pre-initialized +% neural network parameters. + +fprintf('\nLoading Saved Neural Network Parameters ...\n') + +% Load the weights into variables Theta1 and Theta2 +load('ex3weights.mat'); + +%% ================= Part 3: Implement Predict ================= +% After training the neural network, we would like to use it to predict +% the labels. You will now implement the "predict" function to use the +% neural network to predict the labels of the training set. This lets +% you compute the training set accuracy. + +pred = predict(Theta1, Theta2, X); + +fprintf('\nTraining Set Accuracy: %f\n', mean(double(pred == y)) * 100); + +fprintf('Program paused. Press enter to continue.\n'); +pause; + +% To give you an idea of the network's output, you can also run +% through the examples one at the a time to see what it is predicting. + +% Randomly permute examples +rp = randperm(m); + +for i = 1:m + % Display + fprintf('\nDisplaying Example Image\n'); + displayData(X(rp(i), :)); + + pred = predict(Theta1, Theta2, X(rp(i),:)); + fprintf('\nNeural Network Prediction: %d (digit %d)\n', pred, mod(pred, 10)); + + % Pause + fprintf('Program paused. Press enter to continue.\n'); + pause; +end + diff --git a/machine-learning-ex3/fmincg.m b/machine-learning-ex3/fmincg.m new file mode 100644 index 0000000..47a8816 --- /dev/null +++ b/machine-learning-ex3/fmincg.m @@ -0,0 +1,175 @@ +function [X, fX, i] = fmincg(f, X, options, P1, P2, P3, P4, P5) +% Minimize a continuous differentialble multivariate function. Starting point +% is given by "X" (D by 1), and the function named in the string "f", must +% return a function value and a vector of partial derivatives. The Polack- +% Ribiere flavour of conjugate gradients is used to compute search directions, +% and a line search using quadratic and cubic polynomial approximations and the +% Wolfe-Powell stopping criteria is used together with the slope ratio method +% for guessing initial step sizes. Additionally a bunch of checks are made to +% make sure that exploration is taking place and that extrapolation will not +% be unboundedly large. The "length" gives the length of the run: if it is +% positive, it gives the maximum number of line searches, if negative its +% absolute gives the maximum allowed number of function evaluations. You can +% (optionally) give "length" a second component, which will indicate the +% reduction in function value to be expected in the first line-search (defaults +% to 1.0). The function returns when either its length is up, or if no further +% progress can be made (ie, we are at a minimum, or so close that due to +% numerical problems, we cannot get any closer). If the function terminates +% within a few iterations, it could be an indication that the function value +% and derivatives are not consistent (ie, there may be a bug in the +% implementation of your "f" function). The function returns the found +% solution "X", a vector of function values "fX" indicating the progress made +% and "i" the number of iterations (line searches or function evaluations, +% depending on the sign of "length") used. +% +% Usage: [X, fX, i] = fmincg(f, X, options, P1, P2, P3, P4, P5) +% +% See also: checkgrad +% +% Copyright (C) 2001 and 2002 by Carl Edward Rasmussen. Date 2002-02-13 +% +% +% (C) Copyright 1999, 2000 & 2001, Carl Edward Rasmussen +% +% Permission is granted for anyone to copy, use, or modify these +% programs and accompanying documents for purposes of research or +% education, provided this copyright notice is retained, and note is +% made of any changes that have been made. +% +% These programs and documents are distributed without any warranty, +% express or implied. As the programs were written for research +% purposes only, they have not been tested to the degree that would be +% advisable in any important application. All use of these programs is +% entirely at the user's own risk. +% +% [ml-class] Changes Made: +% 1) Function name and argument specifications +% 2) Output display +% + +% Read options +if exist('options', 'var') && ~isempty(options) && isfield(options, 'MaxIter') + length = options.MaxIter; +else + length = 100; +end + + +RHO = 0.01; % a bunch of constants for line searches +SIG = 0.5; % RHO and SIG are the constants in the Wolfe-Powell conditions +INT = 0.1; % don't reevaluate within 0.1 of the limit of the current bracket +EXT = 3.0; % extrapolate maximum 3 times the current bracket +MAX = 20; % max 20 function evaluations per line search +RATIO = 100; % maximum allowed slope ratio + +argstr = ['feval(f, X']; % compose string used to call function +for i = 1:(nargin - 3) + argstr = [argstr, ',P', int2str(i)]; +end +argstr = [argstr, ')']; + +if max(size(length)) == 2, red=length(2); length=length(1); else red=1; end +S=['Iteration ']; + +i = 0; % zero the run length counter +ls_failed = 0; % no previous line search has failed +fX = []; +[f1 df1] = eval(argstr); % get function value and gradient +i = i + (length<0); % count epochs?! +s = -df1; % search direction is steepest +d1 = -s'*s; % this is the slope +z1 = red/(1-d1); % initial step is red/(|s|+1) + +while i < abs(length) % while not finished + i = i + (length>0); % count iterations?! + + X0 = X; f0 = f1; df0 = df1; % make a copy of current values + X = X + z1*s; % begin line search + [f2 df2] = eval(argstr); + i = i + (length<0); % count epochs?! + d2 = df2'*s; + f3 = f1; d3 = d1; z3 = -z1; % initialize point 3 equal to point 1 + if length>0, M = MAX; else M = min(MAX, -length-i); end + success = 0; limit = -1; % initialize quanteties + while 1 + while ((f2 > f1+z1*RHO*d1) || (d2 > -SIG*d1)) && (M > 0) + limit = z1; % tighten the bracket + if f2 > f1 + z2 = z3 - (0.5*d3*z3*z3)/(d3*z3+f2-f3); % quadratic fit + else + A = 6*(f2-f3)/z3+3*(d2+d3); % cubic fit + B = 3*(f3-f2)-z3*(d3+2*d2); + z2 = (sqrt(B*B-A*d2*z3*z3)-B)/A; % numerical error possible - ok! + end + if isnan(z2) || isinf(z2) + z2 = z3/2; % if we had a numerical problem then bisect + end + z2 = max(min(z2, INT*z3),(1-INT)*z3); % don't accept too close to limits + z1 = z1 + z2; % update the step + X = X + z2*s; + [f2 df2] = eval(argstr); + M = M - 1; i = i + (length<0); % count epochs?! + d2 = df2'*s; + z3 = z3-z2; % z3 is now relative to the location of z2 + end + if f2 > f1+z1*RHO*d1 || d2 > -SIG*d1 + break; % this is a failure + elseif d2 > SIG*d1 + success = 1; break; % success + elseif M == 0 + break; % failure + end + A = 6*(f2-f3)/z3+3*(d2+d3); % make cubic extrapolation + B = 3*(f3-f2)-z3*(d3+2*d2); + z2 = -d2*z3*z3/(B+sqrt(B*B-A*d2*z3*z3)); % num. error possible - ok! + if ~isreal(z2) || isnan(z2) || isinf(z2) || z2 < 0 % num prob or wrong sign? + if limit < -0.5 % if we have no upper limit + z2 = z1 * (EXT-1); % the extrapolate the maximum amount + else + z2 = (limit-z1)/2; % otherwise bisect + end + elseif (limit > -0.5) && (z2+z1 > limit) % extraplation beyond max? + z2 = (limit-z1)/2; % bisect + elseif (limit < -0.5) && (z2+z1 > z1*EXT) % extrapolation beyond limit + z2 = z1*(EXT-1.0); % set to extrapolation limit + elseif z2 < -z3*INT + z2 = -z3*INT; + elseif (limit > -0.5) && (z2 < (limit-z1)*(1.0-INT)) % too close to limit? + z2 = (limit-z1)*(1.0-INT); + end + f3 = f2; d3 = d2; z3 = -z2; % set point 3 equal to point 2 + z1 = z1 + z2; X = X + z2*s; % update current estimates + [f2 df2] = eval(argstr); + M = M - 1; i = i + (length<0); % count epochs?! + d2 = df2'*s; + end % end of line search + + if success % if line search succeeded + f1 = f2; fX = [fX' f1]'; + fprintf('%s %4i | Cost: %4.6e\r', S, i, f1); + s = (df2'*df2-df1'*df2)/(df1'*df1)*s - df2; % Polack-Ribiere direction + tmp = df1; df1 = df2; df2 = tmp; % swap derivatives + d2 = df1'*s; + if d2 > 0 % new slope must be negative + s = -df1; % otherwise use steepest direction + d2 = -s'*s; + end + z1 = z1 * min(RATIO, d1/(d2-realmin)); % slope ratio but max RATIO + d1 = d2; + ls_failed = 0; % this line search did not fail + else + X = X0; f1 = f0; df1 = df0; % restore point from before failed line search + if ls_failed || i > abs(length) % line search failed twice in a row + break; % or we ran out of time, so we give up + end + tmp = df1; df1 = df2; df2 = tmp; % swap derivatives + s = -df1; % try steepest + d1 = -s'*s; + z1 = 1/(1-d1); + ls_failed = 1; % this line search failed + end + if exist('OCTAVE_VERSION') + fflush(stdout); + end +end +fprintf('\n'); diff --git a/machine-learning-ex3/lib/jsonlab/AUTHORS.txt b/machine-learning-ex3/lib/jsonlab/AUTHORS.txt new file mode 100644 index 0000000..9dd3fc7 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/AUTHORS.txt @@ -0,0 +1,41 @@ +The author of "jsonlab" toolbox is Qianqian Fang. Qianqian +is currently an Assistant Professor at Massachusetts General Hospital, +Harvard Medical School. + +Address: Martinos Center for Biomedical Imaging, + Massachusetts General Hospital, + Harvard Medical School + Bldg 149, 13th St, Charlestown, MA 02129, USA +URL: http://nmr.mgh.harvard.edu/~fangq/ +Email: or + + +The script loadjson.m was built upon previous works by + +- Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 + date: 2009/11/02 +- Fran莽ois Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 + date: 2009/03/22 +- Joel Feenstra: http://www.mathworks.com/matlabcentral/fileexchange/20565 + date: 2008/07/03 + + +This toolbox contains patches submitted by the following contributors: + +- Blake Johnson + part of revision 341 + +- Niclas Borlin + various fixes in revision 394, including + - loadjson crashes for all-zero sparse matrix. + - loadjson crashes for empty sparse matrix. + - Non-zero size of 0-by-N and N-by-0 empty matrices is lost after savejson/loadjson. + - loadjson crashes for sparse real column vector. + - loadjson crashes for sparse complex column vector. + - Data is corrupted by savejson for sparse real row vector. + - savejson crashes for sparse complex row vector. + +- Yul Kang + patches for svn revision 415. + - savejson saves an empty cell array as [] instead of null + - loadjson differentiates an empty struct from an empty array diff --git a/machine-learning-ex3/lib/jsonlab/ChangeLog.txt b/machine-learning-ex3/lib/jsonlab/ChangeLog.txt new file mode 100644 index 0000000..07824f5 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/ChangeLog.txt @@ -0,0 +1,74 @@ +============================================================================ + + JSONlab - a toolbox to encode/decode JSON/UBJSON files in MATLAB/Octave + +---------------------------------------------------------------------------- + +JSONlab ChangeLog (key features marked by *): + +== JSONlab 1.0 (codename: Optimus - Final), FangQ == + + 2015/01/02 polish help info for all major functions, update examples, finalize 1.0 + 2014/12/19 fix a bug to strictly respect NoRowBracket in savejson + +== JSONlab 1.0.0-RC2 (codename: Optimus - RC2), FangQ == + + 2014/11/22 show progress bar in loadjson ('ShowProgress') + 2014/11/17 add Compact option in savejson to output compact JSON format ('Compact') + 2014/11/17 add FastArrayParser in loadjson to specify fast parser applicable levels + 2014/09/18 start official github mirror: https://github.com/fangq/jsonlab + +== JSONlab 1.0.0-RC1 (codename: Optimus - RC1), FangQ == + + 2014/09/17 fix several compatibility issues when running on octave versions 3.2-3.8 + 2014/09/17 support 2D cell and struct arrays in both savejson and saveubjson + 2014/08/04 escape special characters in a JSON string + 2014/02/16 fix a bug when saving ubjson files + +== JSONlab 0.9.9 (codename: Optimus - beta), FangQ == + + 2014/01/22 use binary read and write in saveubjson and loadubjson + +== JSONlab 0.9.8-1 (codename: Optimus - alpha update 1), FangQ == + + 2013/10/07 better round-trip conservation for empty arrays and structs (patch submitted by Yul Kang) + +== JSONlab 0.9.8 (codename: Optimus - alpha), FangQ == + 2013/08/23 *universal Binary JSON (UBJSON) support, including both saveubjson and loadubjson + +== JSONlab 0.9.1 (codename: Rodimus, update 1), FangQ == + 2012/12/18 *handling of various empty and sparse matrices (fixes submitted by Niclas Borlin) + +== JSONlab 0.9.0 (codename: Rodimus), FangQ == + + 2012/06/17 *new format for an invalid leading char, unpacking hex code in savejson + 2012/06/01 support JSONP in savejson + 2012/05/25 fix the empty cell bug (reported by Cyril Davin) + 2012/04/05 savejson can save to a file (suggested by Patrick Rapin) + +== JSONlab 0.8.1 (codename: Sentiel, Update 1), FangQ == + + 2012/02/28 loadjson quotation mark escape bug, see http://bit.ly/yyk1nS + 2012/01/25 patch to handle root-less objects, contributed by Blake Johnson + +== JSONlab 0.8.0 (codename: Sentiel), FangQ == + + 2012/01/13 *speed up loadjson by 20 fold when parsing large data arrays in matlab + 2012/01/11 remove row bracket if an array has 1 element, suggested by Mykel Kochenderfer + 2011/12/22 *accept sequence of 'param',value input in savejson and loadjson + 2011/11/18 fix struct array bug reported by Mykel Kochenderfer + +== JSONlab 0.5.1 (codename: Nexus Update 1), FangQ == + + 2011/10/21 fix a bug in loadjson, previous code does not use any of the acceleration + 2011/10/20 loadjson supports JSON collections - concatenated JSON objects + +== JSONlab 0.5.0 (codename: Nexus), FangQ == + + 2011/10/16 package and release jsonlab 0.5.0 + 2011/10/15 *add json demo and regression test, support cpx numbers, fix double quote bug + 2011/10/11 *speed up readjson dramatically, interpret _Array* tags, show data in root level + 2011/10/10 create jsonlab project, start jsonlab website, add online documentation + 2011/10/07 *speed up savejson by 25x using sprintf instead of mat2str, add options support + 2011/10/06 *savejson works for structs, cells and arrays + 2011/09/09 derive loadjson from JSON parser from MATLAB Central, draft savejson.m diff --git a/machine-learning-ex3/lib/jsonlab/LICENSE_BSD.txt b/machine-learning-ex3/lib/jsonlab/LICENSE_BSD.txt new file mode 100644 index 0000000..32d66cb --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/LICENSE_BSD.txt @@ -0,0 +1,25 @@ +Copyright 2011-2015 Qianqian Fang . All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of the copyright holders. diff --git a/machine-learning-ex3/lib/jsonlab/README.txt b/machine-learning-ex3/lib/jsonlab/README.txt new file mode 100644 index 0000000..7b4f732 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/README.txt @@ -0,0 +1,394 @@ +=============================================================================== += JSONLab = += An open-source MATLAB/Octave JSON encoder and decoder = +=============================================================================== + +*Copyright (C) 2011-2015 Qianqian Fang +*License: BSD License, see License_BSD.txt for details +*Version: 1.0 (Optimus - Final) + +------------------------------------------------------------------------------- + +Table of Content: + +I. Introduction +II. Installation +III.Using JSONLab +IV. Known Issues and TODOs +V. Contribution and feedback + +------------------------------------------------------------------------------- + +I. Introduction + +JSON ([http://www.json.org/ JavaScript Object Notation]) is a highly portable, +human-readable and "[http://en.wikipedia.org/wiki/JSON fat-free]" text format +to represent complex and hierarchical data. It is as powerful as +[http://en.wikipedia.org/wiki/XML XML], but less verbose. JSON format is widely +used for data-exchange in applications, and is essential for the wild success +of [http://en.wikipedia.org/wiki/Ajax_(programming) Ajax] and +[http://en.wikipedia.org/wiki/Web_2.0 Web2.0]. + +UBJSON (Universal Binary JSON) is a binary JSON format, specifically +optimized for compact file size and better performance while keeping +the semantics as simple as the text-based JSON format. Using the UBJSON +format allows to wrap complex binary data in a flexible and extensible +structure, making it possible to process complex and large dataset +without accuracy loss due to text conversions. + +We envision that both JSON and its binary version will serve as part of +the mainstream data-exchange formats for scientific research in the future. +It will provide the flexibility and generality achieved by other popular +general-purpose file specifications, such as +[http://www.hdfgroup.org/HDF5/whatishdf5.html HDF5], with significantly +reduced complexity and enhanced performance. + +JSONLab is a free and open-source implementation of a JSON/UBJSON encoder +and a decoder in the native MATLAB language. It can be used to convert a MATLAB +data structure (array, struct, cell, struct array and cell array) into +JSON/UBJSON formatted strings, or to decode a JSON/UBJSON file into MATLAB +data structure. JSONLab supports both MATLAB and +[http://www.gnu.org/software/octave/ GNU Octave] (a free MATLAB clone). + +------------------------------------------------------------------------------- + +II. Installation + +The installation of JSONLab is no different than any other simple +MATLAB toolbox. You only need to download/unzip the JSONLab package +to a folder, and add the folder's path to MATLAB/Octave's path list +by using the following command: + + addpath('/path/to/jsonlab'); + +If you want to add this path permanently, you need to type "pathtool", +browse to the jsonlab root folder and add to the list, then click "Save". +Then, run "rehash" in MATLAB, and type "which loadjson", if you see an +output, that means JSONLab is installed for MATLAB/Octave. + +------------------------------------------------------------------------------- + +III.Using JSONLab + +JSONLab provides two functions, loadjson.m -- a MATLAB->JSON decoder, +and savejson.m -- a MATLAB->JSON encoder, for the text-based JSON, and +two equivallent functions -- loadubjson and saveubjson for the binary +JSON. The detailed help info for the four functions can be found below: + +=== loadjson.m === +

+  data=loadjson(fname,opt)
+     or
+  data=loadjson(fname,'param1',value1,'param2',value2,...)
+ 
+  parse a JSON (JavaScript Object Notation) file or string
+ 
+  authors:Qianqian Fang (fangq nmr.mgh.harvard.edu)
+  created on 2011/09/09, including previous works from 
+ 
+          Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713
+             created on 2009/11/02
+          Fran鏾is Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393
+             created on  2009/03/22
+          Joel Feenstra:
+          http://www.mathworks.com/matlabcentral/fileexchange/20565
+             created on 2008/07/03
+ 
+  $Id: loadjson.m 452 2014-11-22 16:43:33Z fangq $
+ 
+  input:
+       fname: input file name, if fname contains "{}" or "[]", fname
+              will be interpreted as a JSON string
+       opt: a struct to store parsing options, opt can be replaced by 
+            a list of ('param',value) pairs - the param string is equivallent
+            to a field in opt. opt can have the following 
+            fields (first in [.|.] is the default)
+ 
+            opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat
+                          for each element of the JSON data, and group 
+                          arrays based on the cell2mat rules.
+            opt.FastArrayParser [1|0 or integer]: if set to 1, use a
+                          speed-optimized array parser when loading an 
+                          array object. The fast array parser may 
+                          collapse block arrays into a single large
+                          array similar to rules defined in cell2mat; 0 to 
+                          use a legacy parser; if set to a larger-than-1
+                          value, this option will specify the minimum
+                          dimension to enable the fast array parser. For
+                          example, if the input is a 3D array, setting
+                          FastArrayParser to 1 will return a 3D array;
+                          setting to 2 will return a cell array of 2D
+                          arrays; setting to 3 will return to a 2D cell
+                          array of 1D vectors; setting to 4 will return a
+                          3D cell array.
+            opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar.
+ 
+  output:
+       dat: a cell array, where {...} blocks are converted into cell arrays,
+            and [...] are converted to arrays
+ 
+  examples:
+       dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}')
+       dat=loadjson(['examples' filesep 'example1.json'])
+       dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1)
+
+ +=== savejson.m === + +
+  json=savejson(rootname,obj,filename)
+     or
+  json=savejson(rootname,obj,opt)
+  json=savejson(rootname,obj,'param1',value1,'param2',value2,...)
+ 
+  convert a MATLAB object (cell, struct or array) into a JSON (JavaScript
+  Object Notation) string
+ 
+  author: Qianqian Fang (fangq nmr.mgh.harvard.edu)
+  created on 2011/09/09
+ 
+  $Id: savejson.m 458 2014-12-19 22:17:17Z fangq $
+ 
+  input:
+       rootname: the name of the root-object, when set to '', the root name
+         is ignored, however, when opt.ForceRootName is set to 1 (see below),
+         the MATLAB variable name will be used as the root name.
+       obj: a MATLAB object (array, cell, cell array, struct, struct array).
+       filename: a string for the file name to save the output JSON data.
+       opt: a struct for additional options, ignore to use default values.
+         opt can have the following fields (first in [.|.] is the default)
+ 
+         opt.FileName [''|string]: a file name to save the output JSON data
+         opt.FloatFormat ['%.10g'|string]: format to show each numeric element
+                          of a 1D/2D array;
+         opt.ArrayIndent [1|0]: if 1, output explicit data array with
+                          precedent indentation; if 0, no indentation
+         opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D
+                          array in JSON array format; if sets to 1, an
+                          array will be shown as a struct with fields
+                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
+                          sparse arrays, the non-zero elements will be
+                          saved to _ArrayData_ field in triplet-format i.e.
+                          (ix,iy,val) and "_ArrayIsSparse_" will be added
+                          with a value of 1; for a complex array, the 
+                          _ArrayData_ array will include two columns 
+                          (4 for sparse) to record the real and imaginary 
+                          parts, and also "_ArrayIsComplex_":1 is added. 
+         opt.ParseLogical [0|1]: if this is set to 1, logical array elem
+                          will use true/false rather than 1/0.
+         opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single
+                          numerical element will be shown without a square
+                          bracket, unless it is the root object; if 0, square
+                          brackets are forced for any numerical arrays.
+         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson
+                          will use the name of the passed obj variable as the 
+                          root object name; if obj is an expression and 
+                          does not have a name, 'root' will be used; if this 
+                          is set to 0 and rootname is empty, the root level 
+                          will be merged down to the lower level.
+         opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern
+                          to represent +/-Inf. The matched pattern is '([-+]*)Inf'
+                          and $1 represents the sign. For those who want to use
+                          1e999 to represent Inf, they can set opt.Inf to '$11e999'
+         opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern
+                          to represent NaN
+         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
+                          for example, if opt.JSONP='foo', the JSON data is
+                          wrapped inside a function call as 'foo(...);'
+         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
+                          back to the string form
+         opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode.
+         opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs)
+ 
+         opt can be replaced by a list of ('param',value) pairs. The param 
+         string is equivallent to a field in opt and is case sensitive.
+  output:
+       json: a string in the JSON format (see http://json.org)
+ 
+  examples:
+       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
+                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
+                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
+                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
+                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
+                'SpecialData',[nan, inf, -inf]);
+       savejson('jmesh',jsonmesh)
+       savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g')
+ 
+ +=== loadubjson.m === + +
+  data=loadubjson(fname,opt)
+     or
+  data=loadubjson(fname,'param1',value1,'param2',value2,...)
+ 
+  parse a JSON (JavaScript Object Notation) file or string
+ 
+  authors:Qianqian Fang (fangq nmr.mgh.harvard.edu)
+  created on 2013/08/01
+ 
+  $Id: loadubjson.m 436 2014-08-05 20:51:40Z fangq $
+ 
+  input:
+       fname: input file name, if fname contains "{}" or "[]", fname
+              will be interpreted as a UBJSON string
+       opt: a struct to store parsing options, opt can be replaced by 
+            a list of ('param',value) pairs - the param string is equivallent
+            to a field in opt. opt can have the following 
+            fields (first in [.|.] is the default)
+ 
+            opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat
+                          for each element of the JSON data, and group 
+                          arrays based on the cell2mat rules.
+            opt.IntEndian [B|L]: specify the endianness of the integer fields
+                          in the UBJSON input data. B - Big-Endian format for 
+                          integers (as required in the UBJSON specification); 
+                          L - input integer fields are in Little-Endian order.
+ 
+  output:
+       dat: a cell array, where {...} blocks are converted into cell arrays,
+            and [...] are converted to arrays
+ 
+  examples:
+       obj=struct('string','value','array',[1 2 3]);
+       ubjdata=saveubjson('obj',obj);
+       dat=loadubjson(ubjdata)
+       dat=loadubjson(['examples' filesep 'example1.ubj'])
+       dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1)
+
+ +=== saveubjson.m === + +
+  json=saveubjson(rootname,obj,filename)
+     or
+  json=saveubjson(rootname,obj,opt)
+  json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...)
+ 
+  convert a MATLAB object (cell, struct or array) into a Universal 
+  Binary JSON (UBJSON) binary string
+ 
+  author: Qianqian Fang (fangq nmr.mgh.harvard.edu)
+  created on 2013/08/17
+ 
+  $Id: saveubjson.m 440 2014-09-17 19:59:45Z fangq $
+ 
+  input:
+       rootname: the name of the root-object, when set to '', the root name
+         is ignored, however, when opt.ForceRootName is set to 1 (see below),
+         the MATLAB variable name will be used as the root name.
+       obj: a MATLAB object (array, cell, cell array, struct, struct array)
+       filename: a string for the file name to save the output UBJSON data
+       opt: a struct for additional options, ignore to use default values.
+         opt can have the following fields (first in [.|.] is the default)
+ 
+         opt.FileName [''|string]: a file name to save the output JSON data
+         opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D
+                          array in JSON array format; if sets to 1, an
+                          array will be shown as a struct with fields
+                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
+                          sparse arrays, the non-zero elements will be
+                          saved to _ArrayData_ field in triplet-format i.e.
+                          (ix,iy,val) and "_ArrayIsSparse_" will be added
+                          with a value of 1; for a complex array, the 
+                          _ArrayData_ array will include two columns 
+                          (4 for sparse) to record the real and imaginary 
+                          parts, and also "_ArrayIsComplex_":1 is added. 
+         opt.ParseLogical [1|0]: if this is set to 1, logical array elem
+                          will use true/false rather than 1/0.
+         opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single
+                          numerical element will be shown without a square
+                          bracket, unless it is the root object; if 0, square
+                          brackets are forced for any numerical arrays.
+         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson
+                          will use the name of the passed obj variable as the 
+                          root object name; if obj is an expression and 
+                          does not have a name, 'root' will be used; if this 
+                          is set to 0 and rootname is empty, the root level 
+                          will be merged down to the lower level.
+         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
+                          for example, if opt.JSON='foo', the JSON data is
+                          wrapped inside a function call as 'foo(...);'
+         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
+                          back to the string form
+ 
+         opt can be replaced by a list of ('param',value) pairs. The param 
+         string is equivallent to a field in opt and is case sensitive.
+  output:
+       json: a binary string in the UBJSON format (see http://ubjson.org)
+ 
+  examples:
+       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
+                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
+                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
+                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
+                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
+                'SpecialData',[nan, inf, -inf]);
+       saveubjson('jsonmesh',jsonmesh)
+       saveubjson('jsonmesh',jsonmesh,'meshdata.ubj')
+
+ + +=== examples === + +Under the "examples" folder, you can find several scripts to demonstrate the +basic utilities of JSONLab. Running the "demo_jsonlab_basic.m" script, you +will see the conversions from MATLAB data structure to JSON text and backward. +In "jsonlab_selftest.m", we load complex JSON files downloaded from the Internet +and validate the loadjson/savejson functions for regression testing purposes. +Similarly, a "demo_ubjson_basic.m" script is provided to test the saveubjson +and loadubjson pairs for various matlab data structures. + +Please run these examples and understand how JSONLab works before you use +it to process your data. + +------------------------------------------------------------------------------- + +IV. Known Issues and TODOs + +JSONLab has several known limitations. We are striving to make it more general +and robust. Hopefully in a few future releases, the limitations become less. + +Here are the known issues: + +# 3D or higher dimensional cell/struct-arrays will be converted to 2D arrays; +# When processing names containing multi-byte characters, Octave and MATLAB \ +can give different field-names; you can use feature('DefaultCharacterSet','latin1') \ +in MATLAB to get consistant results +# savejson can not handle class and dataset. +# saveubjson converts a logical array into a uint8 ([U]) array +# an unofficial N-D array count syntax is implemented in saveubjson. We are \ +actively communicating with the UBJSON spec maintainer to investigate the \ +possibility of making it upstream +# loadubjson can not parse all UBJSON Specification (Draft 9) compliant \ +files, however, it can parse all UBJSON files produced by saveubjson. + +------------------------------------------------------------------------------- + +V. Contribution and feedback + +JSONLab is an open-source project. This means you can not only use it and modify +it as you wish, but also you can contribute your changes back to JSONLab so +that everyone else can enjoy the improvement. For anyone who want to contribute, +please download JSONLab source code from it's subversion repository by using the +following command: + + svn checkout svn://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab jsonlab + +You can make changes to the files as needed. Once you are satisfied with your +changes, and ready to share it with others, please cd the root directory of +JSONLab, and type + + svn diff > yourname_featurename.patch + +You then email the .patch file to JSONLab's maintainer, Qianqian Fang, at +the email address shown in the beginning of this file. Qianqian will review +the changes and commit it to the subversion if they are satisfactory. + +We appreciate any suggestions and feedbacks from you. Please use iso2mesh's +mailing list to report any questions you may have with JSONLab: + +http://groups.google.com/group/iso2mesh-users?hl=en&pli=1 + +(Subscription to the mailing list is needed in order to post messages). diff --git a/machine-learning-ex3/lib/jsonlab/jsonopt.m b/machine-learning-ex3/lib/jsonlab/jsonopt.m new file mode 100644 index 0000000..0bebd8d --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/jsonopt.m @@ -0,0 +1,32 @@ +function val=jsonopt(key,default,varargin) +% +% val=jsonopt(key,default,optstruct) +% +% setting options based on a struct. The struct can be produced +% by varargin2struct from a list of 'param','value' pairs +% +% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) +% +% $Id: loadjson.m 371 2012-06-20 12:43:06Z fangq $ +% +% input: +% key: a string with which one look up a value from a struct +% default: if the key does not exist, return default +% optstruct: a struct where each sub-field is a key +% +% output: +% val: if key exists, val=optstruct.key; otherwise val=default +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +val=default; +if(nargin<=2) return; end +opt=varargin{1}; +if(isstruct(opt) && isfield(opt,key)) + val=getfield(opt,key); +end + diff --git a/machine-learning-ex3/lib/jsonlab/loadjson.m b/machine-learning-ex3/lib/jsonlab/loadjson.m new file mode 100644 index 0000000..42798c0 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/loadjson.m @@ -0,0 +1,566 @@ +function data = loadjson(fname,varargin) +% +% data=loadjson(fname,opt) +% or +% data=loadjson(fname,'param1',value1,'param2',value2,...) +% +% parse a JSON (JavaScript Object Notation) file or string +% +% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) +% created on 2011/09/09, including previous works from +% +% Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 +% created on 2009/11/02 +% Fran莽ois Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 +% created on 2009/03/22 +% Joel Feenstra: +% http://www.mathworks.com/matlabcentral/fileexchange/20565 +% created on 2008/07/03 +% +% $Id: loadjson.m 460 2015-01-03 00:30:45Z fangq $ +% +% input: +% fname: input file name, if fname contains "{}" or "[]", fname +% will be interpreted as a JSON string +% opt: a struct to store parsing options, opt can be replaced by +% a list of ('param',value) pairs - the param string is equivallent +% to a field in opt. opt can have the following +% fields (first in [.|.] is the default) +% +% opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat +% for each element of the JSON data, and group +% arrays based on the cell2mat rules. +% opt.FastArrayParser [1|0 or integer]: if set to 1, use a +% speed-optimized array parser when loading an +% array object. The fast array parser may +% collapse block arrays into a single large +% array similar to rules defined in cell2mat; 0 to +% use a legacy parser; if set to a larger-than-1 +% value, this option will specify the minimum +% dimension to enable the fast array parser. For +% example, if the input is a 3D array, setting +% FastArrayParser to 1 will return a 3D array; +% setting to 2 will return a cell array of 2D +% arrays; setting to 3 will return to a 2D cell +% array of 1D vectors; setting to 4 will return a +% 3D cell array. +% opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar. +% +% output: +% dat: a cell array, where {...} blocks are converted into cell arrays, +% and [...] are converted to arrays +% +% examples: +% dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}') +% dat=loadjson(['examples' filesep 'example1.json']) +% dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1) +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +global pos inStr len esc index_esc len_esc isoct arraytoken + +if(regexp(fname,'[\{\}\]\[]','once')) + string=fname; +elseif(exist(fname,'file')) + fid = fopen(fname,'rb'); + string = fread(fid,inf,'uint8=>char')'; + fclose(fid); +else + error('input file does not exist'); +end + +pos = 1; len = length(string); inStr = string; +isoct=exist('OCTAVE_VERSION','builtin'); +arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); +jstr=regexprep(inStr,'\\\\',' '); +escquote=regexp(jstr,'\\"'); +arraytoken=sort([arraytoken escquote]); + +% String delimiters and escape chars identified to improve speed: +esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); +index_esc = 1; len_esc = length(esc); + +opt=varargin2struct(varargin{:}); + +if(jsonopt('ShowProgress',0,opt)==1) + opt.progressbar_=waitbar(0,'loading ...'); +end +jsoncount=1; +while pos <= len + switch(next_char) + case '{' + data{jsoncount} = parse_object(opt); + case '[' + data{jsoncount} = parse_array(opt); + otherwise + error_pos('Outer level structure must be an object or an array'); + end + jsoncount=jsoncount+1; +end % while + +jsoncount=length(data); +if(jsoncount==1 && iscell(data)) + data=data{1}; +end + +if(~isempty(data)) + if(isstruct(data)) % data can be a struct array + data=jstruct2array(data); + elseif(iscell(data)) + data=jcell2array(data); + end +end +if(isfield(opt,'progressbar_')) + close(opt.progressbar_); +end + +%% +function newdata=jcell2array(data) +len=length(data); +newdata=data; +for i=1:len + if(isstruct(data{i})) + newdata{i}=jstruct2array(data{i}); + elseif(iscell(data{i})) + newdata{i}=jcell2array(data{i}); + end +end + +%%------------------------------------------------------------------------- +function newdata=jstruct2array(data) +fn=fieldnames(data); +newdata=data; +len=length(data); +for i=1:length(fn) % depth-first + for j=1:len + if(isstruct(getfield(data(j),fn{i}))) + newdata(j)=setfield(newdata(j),fn{i},jstruct2array(getfield(data(j),fn{i}))); + end + end +end +if(~isempty(strmatch('x0x5F_ArrayType_',fn)) && ~isempty(strmatch('x0x5F_ArrayData_',fn))) + newdata=cell(len,1); + for j=1:len + ndata=cast(data(j).x0x5F_ArrayData_,data(j).x0x5F_ArrayType_); + iscpx=0; + if(~isempty(strmatch('x0x5F_ArrayIsComplex_',fn))) + if(data(j).x0x5F_ArrayIsComplex_) + iscpx=1; + end + end + if(~isempty(strmatch('x0x5F_ArrayIsSparse_',fn))) + if(data(j).x0x5F_ArrayIsSparse_) + if(~isempty(strmatch('x0x5F_ArraySize_',fn))) + dim=data(j).x0x5F_ArraySize_; + if(iscpx && size(ndata,2)==4-any(dim==1)) + ndata(:,end-1)=complex(ndata(:,end-1),ndata(:,end)); + end + if isempty(ndata) + % All-zeros sparse + ndata=sparse(dim(1),prod(dim(2:end))); + elseif dim(1)==1 + % Sparse row vector + ndata=sparse(1,ndata(:,1),ndata(:,2),dim(1),prod(dim(2:end))); + elseif dim(2)==1 + % Sparse column vector + ndata=sparse(ndata(:,1),1,ndata(:,2),dim(1),prod(dim(2:end))); + else + % Generic sparse array. + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3),dim(1),prod(dim(2:end))); + end + else + if(iscpx && size(ndata,2)==4) + ndata(:,3)=complex(ndata(:,3),ndata(:,4)); + end + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3)); + end + end + elseif(~isempty(strmatch('x0x5F_ArraySize_',fn))) + if(iscpx && size(ndata,2)==2) + ndata=complex(ndata(:,1),ndata(:,2)); + end + ndata=reshape(ndata(:),data(j).x0x5F_ArraySize_); + end + newdata{j}=ndata; + end + if(len==1) + newdata=newdata{1}; + end +end + +%%------------------------------------------------------------------------- +function object = parse_object(varargin) + parse_char('{'); + object = []; + if next_char ~= '}' + while 1 + str = parseStr(varargin{:}); + if isempty(str) + error_pos('Name of value at position %d cannot be empty'); + end + parse_char(':'); + val = parse_value(varargin{:}); + eval( sprintf( 'object.%s = val;', valid_field(str) ) ); + if next_char == '}' + break; + end + parse_char(','); + end + end + parse_char('}'); + +%%------------------------------------------------------------------------- + +function object = parse_array(varargin) % JSON array is written in row-major order +global pos inStr isoct + parse_char('['); + object = cell(0, 1); + dim2=[]; + arraydepth=jsonopt('JSONLAB_ArrayDepth_',1,varargin{:}); + pbar=jsonopt('progressbar_',-1,varargin{:}); + + if next_char ~= ']' + if(jsonopt('FastArrayParser',1,varargin{:})>=1 && arraydepth>=jsonopt('FastArrayParser',1,varargin{:})) + [endpos, e1l, e1r, maxlevel]=matching_bracket(inStr,pos); + arraystr=['[' inStr(pos:endpos)]; + arraystr=regexprep(arraystr,'"_NaN_"','NaN'); + arraystr=regexprep(arraystr,'"([-+]*)_Inf_"','$1Inf'); + arraystr(arraystr==sprintf('\n'))=[]; + arraystr(arraystr==sprintf('\r'))=[]; + %arraystr=regexprep(arraystr,'\s*,',','); % this is slow,sometimes needed + if(~isempty(e1l) && ~isempty(e1r)) % the array is in 2D or higher D + astr=inStr((e1l+1):(e1r-1)); + astr=regexprep(astr,'"_NaN_"','NaN'); + astr=regexprep(astr,'"([-+]*)_Inf_"','$1Inf'); + astr(astr==sprintf('\n'))=[]; + astr(astr==sprintf('\r'))=[]; + astr(astr==' ')=''; + if(isempty(find(astr=='[', 1))) % array is 2D + dim2=length(sscanf(astr,'%f,',[1 inf])); + end + else % array is 1D + astr=arraystr(2:end-1); + astr(astr==' ')=''; + [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',[1,inf]); + if(nextidx>=length(astr)-1) + object=obj; + pos=endpos; + parse_char(']'); + return; + end + end + if(~isempty(dim2)) + astr=arraystr; + astr(astr=='[')=''; + astr(astr==']')=''; + astr(astr==' ')=''; + [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',inf); + if(nextidx>=length(astr)-1) + object=reshape(obj,dim2,numel(obj)/dim2)'; + pos=endpos; + parse_char(']'); + if(pbar>0) + waitbar(pos/length(inStr),pbar,'loading ...'); + end + return; + end + end + arraystr=regexprep(arraystr,'\]\s*,','];'); + else + arraystr='['; + end + try + if(isoct && regexp(arraystr,'"','once')) + error('Octave eval can produce empty cells for JSON-like input'); + end + object=eval(arraystr); + pos=endpos; + catch + while 1 + newopt=varargin2struct(varargin{:},'JSONLAB_ArrayDepth_',arraydepth+1); + val = parse_value(newopt); + object{end+1} = val; + if next_char == ']' + break; + end + parse_char(','); + end + end + end + if(jsonopt('SimplifyCell',0,varargin{:})==1) + try + oldobj=object; + object=cell2mat(object')'; + if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) + object=oldobj; + elseif(size(object,1)>1 && ndims(object)==2) + object=object'; + end + catch + end + end + parse_char(']'); + + if(pbar>0) + waitbar(pos/length(inStr),pbar,'loading ...'); + end +%%------------------------------------------------------------------------- + +function parse_char(c) + global pos inStr len + skip_whitespace; + if pos > len || inStr(pos) ~= c + error_pos(sprintf('Expected %c at position %%d', c)); + else + pos = pos + 1; + skip_whitespace; + end + +%%------------------------------------------------------------------------- + +function c = next_char + global pos inStr len + skip_whitespace; + if pos > len + c = []; + else + c = inStr(pos); + end + +%%------------------------------------------------------------------------- + +function skip_whitespace + global pos inStr len + while pos <= len && isspace(inStr(pos)) + pos = pos + 1; + end + +%%------------------------------------------------------------------------- +function str = parseStr(varargin) + global pos inStr len esc index_esc len_esc + % len, ns = length(inStr), keyboard + if inStr(pos) ~= '"' + error_pos('String starting with " expected at position %d'); + else + pos = pos + 1; + end + str = ''; + while pos <= len + while index_esc <= len_esc && esc(index_esc) < pos + index_esc = index_esc + 1; + end + if index_esc > len_esc + str = [str inStr(pos:len)]; + pos = len + 1; + break; + else + str = [str inStr(pos:esc(index_esc)-1)]; + pos = esc(index_esc); + end + nstr = length(str); switch inStr(pos) + case '"' + pos = pos + 1; + if(~isempty(str)) + if(strcmp(str,'_Inf_')) + str=Inf; + elseif(strcmp(str,'-_Inf_')) + str=-Inf; + elseif(strcmp(str,'_NaN_')) + str=NaN; + end + end + return; + case '\' + if pos+1 > len + error_pos('End of file reached right after escape character'); + end + pos = pos + 1; + switch inStr(pos) + case {'"' '\' '/'} + str(nstr+1) = inStr(pos); + pos = pos + 1; + case {'b' 'f' 'n' 'r' 't'} + str(nstr+1) = sprintf(['\' inStr(pos)]); + pos = pos + 1; + case 'u' + if pos+4 > len + error_pos('End of file reached in escaped unicode character'); + end + str(nstr+(1:6)) = inStr(pos-1:pos+4); + pos = pos + 5; + end + otherwise % should never happen + str(nstr+1) = inStr(pos), keyboard + pos = pos + 1; + end + end + error_pos('End of file while expecting end of inStr'); + +%%------------------------------------------------------------------------- + +function num = parse_number(varargin) + global pos inStr len isoct + currstr=inStr(pos:end); + numstr=0; + if(isoct~=0) + numstr=regexp(currstr,'^\s*-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?','end'); + [num, one] = sscanf(currstr, '%f', 1); + delta=numstr+1; + else + [num, one, err, delta] = sscanf(currstr, '%f', 1); + if ~isempty(err) + error_pos('Error reading number at position %d'); + end + end + pos = pos + delta-1; + +%%------------------------------------------------------------------------- + +function val = parse_value(varargin) + global pos inStr len + true = 1; false = 0; + + pbar=jsonopt('progressbar_',-1,varargin{:}); + if(pbar>0) + waitbar(pos/len,pbar,'loading ...'); + end + + switch(inStr(pos)) + case '"' + val = parseStr(varargin{:}); + return; + case '[' + val = parse_array(varargin{:}); + return; + case '{' + val = parse_object(varargin{:}); + if isstruct(val) + if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact'))) + val=jstruct2array(val); + end + elseif isempty(val) + val = struct; + end + return; + case {'-','0','1','2','3','4','5','6','7','8','9'} + val = parse_number(varargin{:}); + return; + case 't' + if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'true') + val = true; + pos = pos + 4; + return; + end + case 'f' + if pos+4 <= len && strcmpi(inStr(pos:pos+4), 'false') + val = false; + pos = pos + 5; + return; + end + case 'n' + if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'null') + val = []; + pos = pos + 4; + return; + end + end + error_pos('Value expected at position %d'); +%%------------------------------------------------------------------------- + +function error_pos(msg) + global pos inStr len + poShow = max(min([pos-15 pos-1 pos pos+20],len),1); + if poShow(3) == poShow(2) + poShow(3:4) = poShow(2)+[0 -1]; % display nothing after + end + msg = [sprintf(msg, pos) ': ' ... + inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; + error( ['JSONparser:invalidFormat: ' msg] ); + +%%------------------------------------------------------------------------- + +function str = valid_field(str) +global isoct +% From MATLAB doc: field names must begin with a letter, which may be +% followed by any combination of letters, digits, and underscores. +% Invalid characters will be converted to underscores, and the prefix +% "x0x[Hex code]_" will be added if the first character is not a letter. + pos=regexp(str,'^[^A-Za-z]','once'); + if(~isempty(pos)) + if(~isoct) + str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); + else + str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); + end + end + if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return; end + if(~isoct) + str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); + else + pos=regexp(str,'[^0-9A-Za-z_]'); + if(isempty(pos)) return; end + str0=str; + pos0=[0 pos(:)' length(str)]; + str=''; + for i=1:length(pos) + str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; + end + if(pos(end)~=length(str)) + str=[str str0(pos0(end-1)+1:pos0(end))]; + end + end + %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; + +%%------------------------------------------------------------------------- +function endpos = matching_quote(str,pos) +len=length(str); +while(pos1 && str(pos-1)=='\')) + endpos=pos; + return; + end + end + pos=pos+1; +end +error('unmatched quotation mark'); +%%------------------------------------------------------------------------- +function [endpos, e1l, e1r, maxlevel] = matching_bracket(str,pos) +global arraytoken +level=1; +maxlevel=level; +endpos=0; +bpos=arraytoken(arraytoken>=pos); +tokens=str(bpos); +len=length(tokens); +pos=1; +e1l=[]; +e1r=[]; +while(pos<=len) + c=tokens(pos); + if(c==']') + level=level-1; + if(isempty(e1r)) e1r=bpos(pos); end + if(level==0) + endpos=bpos(pos); + return + end + end + if(c=='[') + if(isempty(e1l)) e1l=bpos(pos); end + level=level+1; + maxlevel=max(maxlevel,level); + end + if(c=='"') + pos=matching_quote(tokens,pos+1); + end + pos=pos+1; +end +if(endpos==0) + error('unmatched "]"'); +end + diff --git a/machine-learning-ex3/lib/jsonlab/loadubjson.m b/machine-learning-ex3/lib/jsonlab/loadubjson.m new file mode 100644 index 0000000..0155115 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/loadubjson.m @@ -0,0 +1,528 @@ +function data = loadubjson(fname,varargin) +% +% data=loadubjson(fname,opt) +% or +% data=loadubjson(fname,'param1',value1,'param2',value2,...) +% +% parse a JSON (JavaScript Object Notation) file or string +% +% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) +% created on 2013/08/01 +% +% $Id: loadubjson.m 460 2015-01-03 00:30:45Z fangq $ +% +% input: +% fname: input file name, if fname contains "{}" or "[]", fname +% will be interpreted as a UBJSON string +% opt: a struct to store parsing options, opt can be replaced by +% a list of ('param',value) pairs - the param string is equivallent +% to a field in opt. opt can have the following +% fields (first in [.|.] is the default) +% +% opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat +% for each element of the JSON data, and group +% arrays based on the cell2mat rules. +% opt.IntEndian [B|L]: specify the endianness of the integer fields +% in the UBJSON input data. B - Big-Endian format for +% integers (as required in the UBJSON specification); +% L - input integer fields are in Little-Endian order. +% +% output: +% dat: a cell array, where {...} blocks are converted into cell arrays, +% and [...] are converted to arrays +% +% examples: +% obj=struct('string','value','array',[1 2 3]); +% ubjdata=saveubjson('obj',obj); +% dat=loadubjson(ubjdata) +% dat=loadubjson(['examples' filesep 'example1.ubj']) +% dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1) +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +global pos inStr len esc index_esc len_esc isoct arraytoken fileendian systemendian + +if(regexp(fname,'[\{\}\]\[]','once')) + string=fname; +elseif(exist(fname,'file')) + fid = fopen(fname,'rb'); + string = fread(fid,inf,'uint8=>char')'; + fclose(fid); +else + error('input file does not exist'); +end + +pos = 1; len = length(string); inStr = string; +isoct=exist('OCTAVE_VERSION','builtin'); +arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); +jstr=regexprep(inStr,'\\\\',' '); +escquote=regexp(jstr,'\\"'); +arraytoken=sort([arraytoken escquote]); + +% String delimiters and escape chars identified to improve speed: +esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); +index_esc = 1; len_esc = length(esc); + +opt=varargin2struct(varargin{:}); +fileendian=upper(jsonopt('IntEndian','B',opt)); +[os,maxelem,systemendian]=computer; + +jsoncount=1; +while pos <= len + switch(next_char) + case '{' + data{jsoncount} = parse_object(opt); + case '[' + data{jsoncount} = parse_array(opt); + otherwise + error_pos('Outer level structure must be an object or an array'); + end + jsoncount=jsoncount+1; +end % while + +jsoncount=length(data); +if(jsoncount==1 && iscell(data)) + data=data{1}; +end + +if(~isempty(data)) + if(isstruct(data)) % data can be a struct array + data=jstruct2array(data); + elseif(iscell(data)) + data=jcell2array(data); + end +end + + +%% +function newdata=parse_collection(id,data,obj) + +if(jsoncount>0 && exist('data','var')) + if(~iscell(data)) + newdata=cell(1); + newdata{1}=data; + data=newdata; + end +end + +%% +function newdata=jcell2array(data) +len=length(data); +newdata=data; +for i=1:len + if(isstruct(data{i})) + newdata{i}=jstruct2array(data{i}); + elseif(iscell(data{i})) + newdata{i}=jcell2array(data{i}); + end +end + +%%------------------------------------------------------------------------- +function newdata=jstruct2array(data) +fn=fieldnames(data); +newdata=data; +len=length(data); +for i=1:length(fn) % depth-first + for j=1:len + if(isstruct(getfield(data(j),fn{i}))) + newdata(j)=setfield(newdata(j),fn{i},jstruct2array(getfield(data(j),fn{i}))); + end + end +end +if(~isempty(strmatch('x0x5F_ArrayType_',fn)) && ~isempty(strmatch('x0x5F_ArrayData_',fn))) + newdata=cell(len,1); + for j=1:len + ndata=cast(data(j).x0x5F_ArrayData_,data(j).x0x5F_ArrayType_); + iscpx=0; + if(~isempty(strmatch('x0x5F_ArrayIsComplex_',fn))) + if(data(j).x0x5F_ArrayIsComplex_) + iscpx=1; + end + end + if(~isempty(strmatch('x0x5F_ArrayIsSparse_',fn))) + if(data(j).x0x5F_ArrayIsSparse_) + if(~isempty(strmatch('x0x5F_ArraySize_',fn))) + dim=double(data(j).x0x5F_ArraySize_); + if(iscpx && size(ndata,2)==4-any(dim==1)) + ndata(:,end-1)=complex(ndata(:,end-1),ndata(:,end)); + end + if isempty(ndata) + % All-zeros sparse + ndata=sparse(dim(1),prod(dim(2:end))); + elseif dim(1)==1 + % Sparse row vector + ndata=sparse(1,ndata(:,1),ndata(:,2),dim(1),prod(dim(2:end))); + elseif dim(2)==1 + % Sparse column vector + ndata=sparse(ndata(:,1),1,ndata(:,2),dim(1),prod(dim(2:end))); + else + % Generic sparse array. + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3),dim(1),prod(dim(2:end))); + end + else + if(iscpx && size(ndata,2)==4) + ndata(:,3)=complex(ndata(:,3),ndata(:,4)); + end + ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3)); + end + end + elseif(~isempty(strmatch('x0x5F_ArraySize_',fn))) + if(iscpx && size(ndata,2)==2) + ndata=complex(ndata(:,1),ndata(:,2)); + end + ndata=reshape(ndata(:),data(j).x0x5F_ArraySize_); + end + newdata{j}=ndata; + end + if(len==1) + newdata=newdata{1}; + end +end + +%%------------------------------------------------------------------------- +function object = parse_object(varargin) + parse_char('{'); + object = []; + type=''; + count=-1; + if(next_char == '$') + type=inStr(pos+1); % TODO + pos=pos+2; + end + if(next_char == '#') + pos=pos+1; + count=double(parse_number()); + end + if next_char ~= '}' + num=0; + while 1 + str = parseStr(varargin{:}); + if isempty(str) + error_pos('Name of value at position %d cannot be empty'); + end + %parse_char(':'); + val = parse_value(varargin{:}); + num=num+1; + eval( sprintf( 'object.%s = val;', valid_field(str) ) ); + if next_char == '}' || (count>=0 && num>=count) + break; + end + %parse_char(','); + end + end + if(count==-1) + parse_char('}'); + end + +%%------------------------------------------------------------------------- +function [cid,len]=elem_info(type) +id=strfind('iUIlLdD',type); +dataclass={'int8','uint8','int16','int32','int64','single','double'}; +bytelen=[1,1,2,4,8,4,8]; +if(id>0) + cid=dataclass{id}; + len=bytelen(id); +else + error_pos('unsupported type at position %d'); +end +%%------------------------------------------------------------------------- + + +function [data adv]=parse_block(type,count,varargin) +global pos inStr isoct fileendian systemendian +[cid,len]=elem_info(type); +datastr=inStr(pos:pos+len*count-1); +if(isoct) + newdata=int8(datastr); +else + newdata=uint8(datastr); +end +id=strfind('iUIlLdD',type); +if(id<=5 && fileendian~=systemendian) + newdata=swapbytes(typecast(newdata,cid)); +end +data=typecast(newdata,cid); +adv=double(len*count); + +%%------------------------------------------------------------------------- + + +function object = parse_array(varargin) % JSON array is written in row-major order +global pos inStr isoct + parse_char('['); + object = cell(0, 1); + dim=[]; + type=''; + count=-1; + if(next_char == '$') + type=inStr(pos+1); + pos=pos+2; + end + if(next_char == '#') + pos=pos+1; + if(next_char=='[') + dim=parse_array(varargin{:}); + count=prod(double(dim)); + else + count=double(parse_number()); + end + end + if(~isempty(type)) + if(count>=0) + [object adv]=parse_block(type,count,varargin{:}); + if(~isempty(dim)) + object=reshape(object,dim); + end + pos=pos+adv; + return; + else + endpos=matching_bracket(inStr,pos); + [cid,len]=elem_info(type); + count=(endpos-pos)/len; + [object adv]=parse_block(type,count,varargin{:}); + pos=pos+adv; + parse_char(']'); + return; + end + end + if next_char ~= ']' + while 1 + val = parse_value(varargin{:}); + object{end+1} = val; + if next_char == ']' + break; + end + %parse_char(','); + end + end + if(jsonopt('SimplifyCell',0,varargin{:})==1) + try + oldobj=object; + object=cell2mat(object')'; + if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) + object=oldobj; + elseif(size(object,1)>1 && ndims(object)==2) + object=object'; + end + catch + end + end + if(count==-1) + parse_char(']'); + end + +%%------------------------------------------------------------------------- + +function parse_char(c) + global pos inStr len + skip_whitespace; + if pos > len || inStr(pos) ~= c + error_pos(sprintf('Expected %c at position %%d', c)); + else + pos = pos + 1; + skip_whitespace; + end + +%%------------------------------------------------------------------------- + +function c = next_char + global pos inStr len + skip_whitespace; + if pos > len + c = []; + else + c = inStr(pos); + end + +%%------------------------------------------------------------------------- + +function skip_whitespace + global pos inStr len + while pos <= len && isspace(inStr(pos)) + pos = pos + 1; + end + +%%------------------------------------------------------------------------- +function str = parseStr(varargin) + global pos inStr esc index_esc len_esc + % len, ns = length(inStr), keyboard + type=inStr(pos); + if type ~= 'S' && type ~= 'C' && type ~= 'H' + error_pos('String starting with S expected at position %d'); + else + pos = pos + 1; + end + if(type == 'C') + str=inStr(pos); + pos=pos+1; + return; + end + bytelen=double(parse_number()); + if(length(inStr)>=pos+bytelen-1) + str=inStr(pos:pos+bytelen-1); + pos=pos+bytelen; + else + error_pos('End of file while expecting end of inStr'); + end + +%%------------------------------------------------------------------------- + +function num = parse_number(varargin) + global pos inStr len isoct fileendian systemendian + id=strfind('iUIlLdD',inStr(pos)); + if(isempty(id)) + error_pos('expecting a number at position %d'); + end + type={'int8','uint8','int16','int32','int64','single','double'}; + bytelen=[1,1,2,4,8,4,8]; + datastr=inStr(pos+1:pos+bytelen(id)); + if(isoct) + newdata=int8(datastr); + else + newdata=uint8(datastr); + end + if(id<=5 && fileendian~=systemendian) + newdata=swapbytes(typecast(newdata,type{id})); + end + num=typecast(newdata,type{id}); + pos = pos + bytelen(id)+1; + +%%------------------------------------------------------------------------- + +function val = parse_value(varargin) + global pos inStr len + true = 1; false = 0; + + switch(inStr(pos)) + case {'S','C','H'} + val = parseStr(varargin{:}); + return; + case '[' + val = parse_array(varargin{:}); + return; + case '{' + val = parse_object(varargin{:}); + if isstruct(val) + if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact'))) + val=jstruct2array(val); + end + elseif isempty(val) + val = struct; + end + return; + case {'i','U','I','l','L','d','D'} + val = parse_number(varargin{:}); + return; + case 'T' + val = true; + pos = pos + 1; + return; + case 'F' + val = false; + pos = pos + 1; + return; + case {'Z','N'} + val = []; + pos = pos + 1; + return; + end + error_pos('Value expected at position %d'); +%%------------------------------------------------------------------------- + +function error_pos(msg) + global pos inStr len + poShow = max(min([pos-15 pos-1 pos pos+20],len),1); + if poShow(3) == poShow(2) + poShow(3:4) = poShow(2)+[0 -1]; % display nothing after + end + msg = [sprintf(msg, pos) ': ' ... + inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; + error( ['JSONparser:invalidFormat: ' msg] ); + +%%------------------------------------------------------------------------- + +function str = valid_field(str) +global isoct +% From MATLAB doc: field names must begin with a letter, which may be +% followed by any combination of letters, digits, and underscores. +% Invalid characters will be converted to underscores, and the prefix +% "x0x[Hex code]_" will be added if the first character is not a letter. + pos=regexp(str,'^[^A-Za-z]','once'); + if(~isempty(pos)) + if(~isoct) + str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); + else + str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); + end + end + if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return; end + if(~isoct) + str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); + else + pos=regexp(str,'[^0-9A-Za-z_]'); + if(isempty(pos)) return; end + str0=str; + pos0=[0 pos(:)' length(str)]; + str=''; + for i=1:length(pos) + str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; + end + if(pos(end)~=length(str)) + str=[str str0(pos0(end-1)+1:pos0(end))]; + end + end + %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; + +%%------------------------------------------------------------------------- +function endpos = matching_quote(str,pos) +len=length(str); +while(pos1 && str(pos-1)=='\')) + endpos=pos; + return; + end + end + pos=pos+1; +end +error('unmatched quotation mark'); +%%------------------------------------------------------------------------- +function [endpos e1l e1r maxlevel] = matching_bracket(str,pos) +global arraytoken +level=1; +maxlevel=level; +endpos=0; +bpos=arraytoken(arraytoken>=pos); +tokens=str(bpos); +len=length(tokens); +pos=1; +e1l=[]; +e1r=[]; +while(pos<=len) + c=tokens(pos); + if(c==']') + level=level-1; + if(isempty(e1r)) e1r=bpos(pos); end + if(level==0) + endpos=bpos(pos); + return + end + end + if(c=='[') + if(isempty(e1l)) e1l=bpos(pos); end + level=level+1; + maxlevel=max(maxlevel,level); + end + if(c=='"') + pos=matching_quote(tokens,pos+1); + end + pos=pos+1; +end +if(endpos==0) + error('unmatched "]"'); +end + diff --git a/machine-learning-ex3/lib/jsonlab/mergestruct.m b/machine-learning-ex3/lib/jsonlab/mergestruct.m new file mode 100644 index 0000000..6de6100 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/mergestruct.m @@ -0,0 +1,33 @@ +function s=mergestruct(s1,s2) +% +% s=mergestruct(s1,s2) +% +% merge two struct objects into one +% +% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) +% date: 2012/12/22 +% +% input: +% s1,s2: a struct object, s1 and s2 can not be arrays +% +% output: +% s: the merged struct object. fields in s1 and s2 will be combined in s. +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(~isstruct(s1) || ~isstruct(s2)) + error('input parameters contain non-struct'); +end +if(length(s1)>1 || length(s2)>1) + error('can not merge struct arrays'); +end +fn=fieldnames(s2); +s=s1; +for i=1:length(fn) + s=setfield(s,fn{i},getfield(s2,fn{i})); +end + diff --git a/machine-learning-ex3/lib/jsonlab/savejson.m b/machine-learning-ex3/lib/jsonlab/savejson.m new file mode 100644 index 0000000..7e84076 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/savejson.m @@ -0,0 +1,475 @@ +function json=savejson(rootname,obj,varargin) +% +% json=savejson(rootname,obj,filename) +% or +% json=savejson(rootname,obj,opt) +% json=savejson(rootname,obj,'param1',value1,'param2',value2,...) +% +% convert a MATLAB object (cell, struct or array) into a JSON (JavaScript +% Object Notation) string +% +% author: Qianqian Fang (fangq nmr.mgh.harvard.edu) +% created on 2011/09/09 +% +% $Id: savejson.m 460 2015-01-03 00:30:45Z fangq $ +% +% input: +% rootname: the name of the root-object, when set to '', the root name +% is ignored, however, when opt.ForceRootName is set to 1 (see below), +% the MATLAB variable name will be used as the root name. +% obj: a MATLAB object (array, cell, cell array, struct, struct array). +% filename: a string for the file name to save the output JSON data. +% opt: a struct for additional options, ignore to use default values. +% opt can have the following fields (first in [.|.] is the default) +% +% opt.FileName [''|string]: a file name to save the output JSON data +% opt.FloatFormat ['%.10g'|string]: format to show each numeric element +% of a 1D/2D array; +% opt.ArrayIndent [1|0]: if 1, output explicit data array with +% precedent indentation; if 0, no indentation +% opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D +% array in JSON array format; if sets to 1, an +% array will be shown as a struct with fields +% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for +% sparse arrays, the non-zero elements will be +% saved to _ArrayData_ field in triplet-format i.e. +% (ix,iy,val) and "_ArrayIsSparse_" will be added +% with a value of 1; for a complex array, the +% _ArrayData_ array will include two columns +% (4 for sparse) to record the real and imaginary +% parts, and also "_ArrayIsComplex_":1 is added. +% opt.ParseLogical [0|1]: if this is set to 1, logical array elem +% will use true/false rather than 1/0. +% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single +% numerical element will be shown without a square +% bracket, unless it is the root object; if 0, square +% brackets are forced for any numerical arrays. +% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson +% will use the name of the passed obj variable as the +% root object name; if obj is an expression and +% does not have a name, 'root' will be used; if this +% is set to 0 and rootname is empty, the root level +% will be merged down to the lower level. +% opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern +% to represent +/-Inf. The matched pattern is '([-+]*)Inf' +% and $1 represents the sign. For those who want to use +% 1e999 to represent Inf, they can set opt.Inf to '$11e999' +% opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern +% to represent NaN +% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), +% for example, if opt.JSONP='foo', the JSON data is +% wrapped inside a function call as 'foo(...);' +% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson +% back to the string form +% opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode. +% opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs) +% +% opt can be replaced by a list of ('param',value) pairs. The param +% string is equivallent to a field in opt and is case sensitive. +% output: +% json: a string in the JSON format (see http://json.org) +% +% examples: +% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... +% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... +% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... +% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... +% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... +% 'SpecialData',[nan, inf, -inf]); +% savejson('jmesh',jsonmesh) +% savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g') +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(nargin==1) + varname=inputname(1); + obj=rootname; + if(isempty(varname)) + varname='root'; + end + rootname=varname; +else + varname=inputname(2); +end +if(length(varargin)==1 && ischar(varargin{1})) + opt=struct('FileName',varargin{1}); +else + opt=varargin2struct(varargin{:}); +end +opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +rootisarray=0; +rootlevel=1; +forceroot=jsonopt('ForceRootName',0,opt); +if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || iscell(obj)) && isempty(rootname) && forceroot==0) + rootisarray=1; + rootlevel=0; +else + if(isempty(rootname)) + rootname=varname; + end +end +if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) + rootname='root'; +end + +whitespaces=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +if(jsonopt('Compact',0,opt)==1) + whitespaces=struct('tab','','newline','','sep',','); +end +if(~isfield(opt,'whitespaces_')) + opt.whitespaces_=whitespaces; +end + +nl=whitespaces.newline; + +json=obj2json(rootname,obj,rootlevel,opt); +if(rootisarray) + json=sprintf('%s%s',json,nl); +else + json=sprintf('{%s%s%s}\n',nl,json,nl); +end + +jsonp=jsonopt('JSONP','',opt); +if(~isempty(jsonp)) + json=sprintf('%s(%s);%s',jsonp,json,nl); +end + +% save to a file if FileName is set, suggested by Patrick Rapin +if(~isempty(jsonopt('FileName','',opt))) + if(jsonopt('SaveBinary',0,opt)==1) + fid = fopen(opt.FileName, 'wb'); + fwrite(fid,json); + else + fid = fopen(opt.FileName, 'wt'); + fwrite(fid,json,'char'); + end + fclose(fid); +end + +%%------------------------------------------------------------------------- +function txt=obj2json(name,item,level,varargin) + +if(iscell(item)) + txt=cell2json(name,item,level,varargin{:}); +elseif(isstruct(item)) + txt=struct2json(name,item,level,varargin{:}); +elseif(ischar(item)) + txt=str2json(name,item,level,varargin{:}); +else + txt=mat2json(name,item,level,varargin{:}); +end + +%%------------------------------------------------------------------------- +function txt=cell2json(name,item,level,varargin) +txt=''; +if(~iscell(item)) + error('input is not a cell'); +end + +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); +ws=jsonopt('whitespaces_',struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')),varargin{:}); +padding0=repmat(ws.tab,1,level); +padding2=repmat(ws.tab,1,level+1); +nl=ws.newline; +if(len>1) + if(~isempty(name)) + txt=sprintf('%s"%s": [%s',padding0, checkname(name,varargin{:}),nl); name=''; + else + txt=sprintf('%s[%s',padding0,nl); + end +elseif(len==0) + if(~isempty(name)) + txt=sprintf('%s"%s": []',padding0, checkname(name,varargin{:})); name=''; + else + txt=sprintf('%s[]',padding0); + end +end +for j=1:dim(2) + if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end + for i=1:dim(1) + txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+1,varargin{:})); + if(i1) txt=sprintf('%s%s%s]',txt,nl,padding2); end + if(j1) txt=sprintf('%s%s%s]',txt,nl,padding0); end + +%%------------------------------------------------------------------------- +function txt=struct2json(name,item,level,varargin) +txt=''; +if(~isstruct(item)) + error('input is not a struct'); +end +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +padding0=repmat(ws.tab,1,level); +padding2=repmat(ws.tab,1,level+1); +padding1=repmat(ws.tab,1,level+(dim(1)>1)+(len>1)); +nl=ws.newline; + +if(~isempty(name)) + if(len>1) txt=sprintf('%s"%s": [%s',padding0,checkname(name,varargin{:}),nl); end +else + if(len>1) txt=sprintf('%s[%s',padding0,nl); end +end +for j=1:dim(2) + if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end + for i=1:dim(1) + names = fieldnames(item(i,j)); + if(~isempty(name) && len==1) + txt=sprintf('%s%s"%s": {%s',txt,padding1, checkname(name,varargin{:}),nl); + else + txt=sprintf('%s%s{%s',txt,padding1,nl); + end + if(~isempty(names)) + for e=1:length(names) + txt=sprintf('%s%s',txt,obj2json(names{e},getfield(item(i,j),... + names{e}),level+(dim(1)>1)+1+(len>1),varargin{:})); + if(e1) txt=sprintf('%s%s%s]',txt,nl,padding2); end + if(j1) txt=sprintf('%s%s%s]',txt,nl,padding0); end + +%%------------------------------------------------------------------------- +function txt=str2json(name,item,level,varargin) +txt=''; +if(~ischar(item)) + error('input is not a string'); +end +item=reshape(item, max(size(item),[1 0])); +len=size(item,1); +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +padding1=repmat(ws.tab,1,level); +padding0=repmat(ws.tab,1,level+1); +nl=ws.newline; +sep=ws.sep; + +if(~isempty(name)) + if(len>1) txt=sprintf('%s"%s": [%s',padding1,checkname(name,varargin{:}),nl); end +else + if(len>1) txt=sprintf('%s[%s',padding1,nl); end +end +isoct=jsonopt('IsOctave',0,varargin{:}); +for e=1:len + if(isoct) + val=regexprep(item(e,:),'\\','\\'); + val=regexprep(val,'"','\"'); + val=regexprep(val,'^"','\"'); + else + val=regexprep(item(e,:),'\\','\\\\'); + val=regexprep(val,'"','\\"'); + val=regexprep(val,'^"','\\"'); + end + val=escapejsonstring(val); + if(len==1) + obj=['"' checkname(name,varargin{:}) '": ' '"',val,'"']; + if(isempty(name)) obj=['"',val,'"']; end + txt=sprintf('%s%s%s%s',txt,padding1,obj); + else + txt=sprintf('%s%s%s%s',txt,padding0,['"',val,'"']); + end + if(e==len) sep=''; end + txt=sprintf('%s%s',txt,sep); +end +if(len>1) txt=sprintf('%s%s%s%s',txt,nl,padding1,']'); end + +%%------------------------------------------------------------------------- +function txt=mat2json(name,item,level,varargin) +if(~isnumeric(item) && ~islogical(item)) + error('input is not an array'); +end +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +padding1=repmat(ws.tab,1,level); +padding0=repmat(ws.tab,1,level+1); +nl=ws.newline; +sep=ws.sep; + +if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... + isempty(item) ||jsonopt('ArrayToStruct',0,varargin{:})) + if(isempty(name)) + txt=sprintf('%s{%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... + padding1,nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); + else + txt=sprintf('%s"%s": {%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... + padding1,checkname(name,varargin{:}),nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); + end +else + if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1 && level>0) + numtxt=regexprep(regexprep(matdata2json(item,level+1,varargin{:}),'^\[',''),']',''); + else + numtxt=matdata2json(item,level+1,varargin{:}); + end + if(isempty(name)) + txt=sprintf('%s%s',padding1,numtxt); + else + if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) + txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); + else + txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); + end + end + return; +end +dataformat='%s%s%s%s%s'; + +if(issparse(item)) + [ix,iy]=find(item); + data=full(item(find(item))); + if(~isreal(item)) + data=[real(data(:)),imag(data(:))]; + if(size(item,1)==1) + % Kludge to have data's 'transposedness' match item's. + % (Necessary for complex row vector handling below.) + data=data'; + end + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); + end + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsSparse_": ','1', sep); + if(size(item,1)==1) + % Row vector, store only column indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([iy(:),data'],level+2,varargin{:}), nl); + elseif(size(item,2)==1) + % Column vector, store only row indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([ix,data],level+2,varargin{:}), nl); + else + % General case, store row and column indices. + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([ix,iy,data],level+2,varargin{:}), nl); + end +else + if(isreal(item)) + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json(item(:)',level+2,varargin{:}), nl); + else + txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); + txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... + matdata2json([real(item(:)) imag(item(:))],level+2,varargin{:}), nl); + end +end +txt=sprintf('%s%s%s',txt,padding1,'}'); + +%%------------------------------------------------------------------------- +function txt=matdata2json(mat,level,varargin) + +ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); +ws=jsonopt('whitespaces_',ws,varargin{:}); +tab=ws.tab; +nl=ws.newline; + +if(size(mat,1)==1) + pre=''; + post=''; + level=level-1; +else + pre=sprintf('[%s',nl); + post=sprintf('%s%s]',nl,repmat(tab,1,level-1)); +end + +if(isempty(mat)) + txt='null'; + return; +end +floatformat=jsonopt('FloatFormat','%.10g',varargin{:}); +%if(numel(mat)>1) + formatstr=['[' repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf('],%s',nl)]]; +%else +% formatstr=[repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf(',\n')]]; +%end + +if(nargin>=2 && size(mat,1)>1 && jsonopt('ArrayIndent',1,varargin{:})==1) + formatstr=[repmat(tab,1,level) formatstr]; +end + +txt=sprintf(formatstr,mat'); +txt(end-length(nl):end)=[]; +if(islogical(mat) && jsonopt('ParseLogical',0,varargin{:})==1) + txt=regexprep(txt,'1','true'); + txt=regexprep(txt,'0','false'); +end +%txt=regexprep(mat2str(mat),'\s+',','); +%txt=regexprep(txt,';',sprintf('],\n[')); +% if(nargin>=2 && size(mat,1)>1) +% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); +% end +txt=[pre txt post]; +if(any(isinf(mat(:)))) + txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); +end +if(any(isnan(mat(:)))) + txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); +end + +%%------------------------------------------------------------------------- +function newname=checkname(name,varargin) +isunpack=jsonopt('UnpackHex',1,varargin{:}); +newname=name; +if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) + return +end +if(isunpack) + isoct=jsonopt('IsOctave',0,varargin{:}); + if(~isoct) + newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); + else + pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); + pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); + if(isempty(pos)) return; end + str0=name; + pos0=[0 pend(:)' length(name)]; + newname=''; + for i=1:length(pos) + newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; + end + if(pos(end)~=length(name)) + newname=[newname str0(pos0(end-1)+1:pos0(end))]; + end + end +end + +%%------------------------------------------------------------------------- +function newstr=escapejsonstring(str) +newstr=str; +isoct=exist('OCTAVE_VERSION','builtin'); +if(isoct) + vv=sscanf(OCTAVE_VERSION,'%f'); + if(vv(1)>=3.8) isoct=0; end +end +if(isoct) + escapechars={'\a','\f','\n','\r','\t','\v'}; + for i=1:length(escapechars); + newstr=regexprep(newstr,escapechars{i},escapechars{i}); + end +else + escapechars={'\a','\b','\f','\n','\r','\t','\v'}; + for i=1:length(escapechars); + newstr=regexprep(newstr,escapechars{i},regexprep(escapechars{i},'\\','\\\\')); + end +end diff --git a/machine-learning-ex3/lib/jsonlab/saveubjson.m b/machine-learning-ex3/lib/jsonlab/saveubjson.m new file mode 100644 index 0000000..eaec433 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/saveubjson.m @@ -0,0 +1,504 @@ +function json=saveubjson(rootname,obj,varargin) +% +% json=saveubjson(rootname,obj,filename) +% or +% json=saveubjson(rootname,obj,opt) +% json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...) +% +% convert a MATLAB object (cell, struct or array) into a Universal +% Binary JSON (UBJSON) binary string +% +% author: Qianqian Fang (fangq nmr.mgh.harvard.edu) +% created on 2013/08/17 +% +% $Id: saveubjson.m 460 2015-01-03 00:30:45Z fangq $ +% +% input: +% rootname: the name of the root-object, when set to '', the root name +% is ignored, however, when opt.ForceRootName is set to 1 (see below), +% the MATLAB variable name will be used as the root name. +% obj: a MATLAB object (array, cell, cell array, struct, struct array) +% filename: a string for the file name to save the output UBJSON data +% opt: a struct for additional options, ignore to use default values. +% opt can have the following fields (first in [.|.] is the default) +% +% opt.FileName [''|string]: a file name to save the output JSON data +% opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D +% array in JSON array format; if sets to 1, an +% array will be shown as a struct with fields +% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for +% sparse arrays, the non-zero elements will be +% saved to _ArrayData_ field in triplet-format i.e. +% (ix,iy,val) and "_ArrayIsSparse_" will be added +% with a value of 1; for a complex array, the +% _ArrayData_ array will include two columns +% (4 for sparse) to record the real and imaginary +% parts, and also "_ArrayIsComplex_":1 is added. +% opt.ParseLogical [1|0]: if this is set to 1, logical array elem +% will use true/false rather than 1/0. +% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single +% numerical element will be shown without a square +% bracket, unless it is the root object; if 0, square +% brackets are forced for any numerical arrays. +% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson +% will use the name of the passed obj variable as the +% root object name; if obj is an expression and +% does not have a name, 'root' will be used; if this +% is set to 0 and rootname is empty, the root level +% will be merged down to the lower level. +% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), +% for example, if opt.JSON='foo', the JSON data is +% wrapped inside a function call as 'foo(...);' +% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson +% back to the string form +% +% opt can be replaced by a list of ('param',value) pairs. The param +% string is equivallent to a field in opt and is case sensitive. +% output: +% json: a binary string in the UBJSON format (see http://ubjson.org) +% +% examples: +% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... +% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... +% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... +% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... +% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... +% 'SpecialData',[nan, inf, -inf]); +% saveubjson('jsonmesh',jsonmesh) +% saveubjson('jsonmesh',jsonmesh,'meshdata.ubj') +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +if(nargin==1) + varname=inputname(1); + obj=rootname; + if(isempty(varname)) + varname='root'; + end + rootname=varname; +else + varname=inputname(2); +end +if(length(varargin)==1 && ischar(varargin{1})) + opt=struct('FileName',varargin{1}); +else + opt=varargin2struct(varargin{:}); +end +opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +rootisarray=0; +rootlevel=1; +forceroot=jsonopt('ForceRootName',0,opt); +if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || iscell(obj)) && isempty(rootname) && forceroot==0) + rootisarray=1; + rootlevel=0; +else + if(isempty(rootname)) + rootname=varname; + end +end +if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) + rootname='root'; +end +json=obj2ubjson(rootname,obj,rootlevel,opt); +if(~rootisarray) + json=['{' json '}']; +end + +jsonp=jsonopt('JSONP','',opt); +if(~isempty(jsonp)) + json=[jsonp '(' json ')']; +end + +% save to a file if FileName is set, suggested by Patrick Rapin +if(~isempty(jsonopt('FileName','',opt))) + fid = fopen(opt.FileName, 'wb'); + fwrite(fid,json); + fclose(fid); +end + +%%------------------------------------------------------------------------- +function txt=obj2ubjson(name,item,level,varargin) + +if(iscell(item)) + txt=cell2ubjson(name,item,level,varargin{:}); +elseif(isstruct(item)) + txt=struct2ubjson(name,item,level,varargin{:}); +elseif(ischar(item)) + txt=str2ubjson(name,item,level,varargin{:}); +else + txt=mat2ubjson(name,item,level,varargin{:}); +end + +%%------------------------------------------------------------------------- +function txt=cell2ubjson(name,item,level,varargin) +txt=''; +if(~iscell(item)) + error('input is not a cell'); +end + +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); % let's handle 1D cell first +if(len>1) + if(~isempty(name)) + txt=[S_(checkname(name,varargin{:})) '[']; name=''; + else + txt='['; + end +elseif(len==0) + if(~isempty(name)) + txt=[S_(checkname(name,varargin{:})) 'Z']; name=''; + else + txt='Z'; + end +end +for j=1:dim(2) + if(dim(1)>1) txt=[txt '[']; end + for i=1:dim(1) + txt=[txt obj2ubjson(name,item{i,j},level+(len>1),varargin{:})]; + end + if(dim(1)>1) txt=[txt ']']; end +end +if(len>1) txt=[txt ']']; end + +%%------------------------------------------------------------------------- +function txt=struct2ubjson(name,item,level,varargin) +txt=''; +if(~isstruct(item)) + error('input is not a struct'); +end +dim=size(item); +if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now + item=reshape(item,dim(1),numel(item)/dim(1)); + dim=size(item); +end +len=numel(item); + +if(~isempty(name)) + if(len>1) txt=[S_(checkname(name,varargin{:})) '[']; end +else + if(len>1) txt='['; end +end +for j=1:dim(2) + if(dim(1)>1) txt=[txt '[']; end + for i=1:dim(1) + names = fieldnames(item(i,j)); + if(~isempty(name) && len==1) + txt=[txt S_(checkname(name,varargin{:})) '{']; + else + txt=[txt '{']; + end + if(~isempty(names)) + for e=1:length(names) + txt=[txt obj2ubjson(names{e},getfield(item(i,j),... + names{e}),level+(dim(1)>1)+1+(len>1),varargin{:})]; + end + end + txt=[txt '}']; + end + if(dim(1)>1) txt=[txt ']']; end +end +if(len>1) txt=[txt ']']; end + +%%------------------------------------------------------------------------- +function txt=str2ubjson(name,item,level,varargin) +txt=''; +if(~ischar(item)) + error('input is not a string'); +end +item=reshape(item, max(size(item),[1 0])); +len=size(item,1); + +if(~isempty(name)) + if(len>1) txt=[S_(checkname(name,varargin{:})) '[']; end +else + if(len>1) txt='['; end +end +isoct=jsonopt('IsOctave',0,varargin{:}); +for e=1:len + val=item(e,:); + if(len==1) + obj=['' S_(checkname(name,varargin{:})) '' '',S_(val),'']; + if(isempty(name)) obj=['',S_(val),'']; end + txt=[txt,'',obj]; + else + txt=[txt,'',['',S_(val),'']]; + end +end +if(len>1) txt=[txt ']']; end + +%%------------------------------------------------------------------------- +function txt=mat2ubjson(name,item,level,varargin) +if(~isnumeric(item) && ~islogical(item)) + error('input is not an array'); +end + +if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... + isempty(item) || jsonopt('ArrayToStruct',0,varargin{:})) + cid=I_(uint32(max(size(item)))); + if(isempty(name)) + txt=['{' S_('_ArrayType_'),S_(class(item)),S_('_ArraySize_'),I_a(size(item),cid(1)) ]; + else + if(isempty(item)) + txt=[S_(checkname(name,varargin{:})),'Z']; + return; + else + txt=[S_(checkname(name,varargin{:})),'{',S_('_ArrayType_'),S_(class(item)),S_('_ArraySize_'),I_a(size(item),cid(1))]; + end + end +else + if(isempty(name)) + txt=matdata2ubjson(item,level+1,varargin{:}); + else + if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) + numtxt=regexprep(regexprep(matdata2ubjson(item,level+1,varargin{:}),'^\[',''),']',''); + txt=[S_(checkname(name,varargin{:})) numtxt]; + else + txt=[S_(checkname(name,varargin{:})),matdata2ubjson(item,level+1,varargin{:})]; + end + end + return; +end +if(issparse(item)) + [ix,iy]=find(item); + data=full(item(find(item))); + if(~isreal(item)) + data=[real(data(:)),imag(data(:))]; + if(size(item,1)==1) + % Kludge to have data's 'transposedness' match item's. + % (Necessary for complex row vector handling below.) + data=data'; + end + txt=[txt,S_('_ArrayIsComplex_'),'T']; + end + txt=[txt,S_('_ArrayIsSparse_'),'T']; + if(size(item,1)==1) + % Row vector, store only column indices. + txt=[txt,S_('_ArrayData_'),... + matdata2ubjson([iy(:),data'],level+2,varargin{:})]; + elseif(size(item,2)==1) + % Column vector, store only row indices. + txt=[txt,S_('_ArrayData_'),... + matdata2ubjson([ix,data],level+2,varargin{:})]; + else + % General case, store row and column indices. + txt=[txt,S_('_ArrayData_'),... + matdata2ubjson([ix,iy,data],level+2,varargin{:})]; + end +else + if(isreal(item)) + txt=[txt,S_('_ArrayData_'),... + matdata2ubjson(item(:)',level+2,varargin{:})]; + else + txt=[txt,S_('_ArrayIsComplex_'),'T']; + txt=[txt,S_('_ArrayData_'),... + matdata2ubjson([real(item(:)) imag(item(:))],level+2,varargin{:})]; + end +end +txt=[txt,'}']; + +%%------------------------------------------------------------------------- +function txt=matdata2ubjson(mat,level,varargin) +if(isempty(mat)) + txt='Z'; + return; +end +if(size(mat,1)==1) + level=level-1; +end +type=''; +hasnegtive=(mat<0); +if(isa(mat,'integer') || isinteger(mat) || (isfloat(mat) && all(mod(mat(:),1) == 0))) + if(isempty(hasnegtive)) + if(max(mat(:))<=2^8) + type='U'; + end + end + if(isempty(type)) + % todo - need to consider negative ones separately + id= histc(abs(max(mat(:))),[0 2^7 2^15 2^31 2^63]); + if(isempty(find(id))) + error('high-precision data is not yet supported'); + end + key='iIlL'; + type=key(find(id)); + end + txt=[I_a(mat(:),type,size(mat))]; +elseif(islogical(mat)) + logicalval='FT'; + if(numel(mat)==1) + txt=logicalval(mat+1); + else + txt=['[$U#' I_a(size(mat),'l') typecast(swapbytes(uint8(mat(:)')),'uint8')]; + end +else + if(numel(mat)==1) + txt=['[' D_(mat) ']']; + else + txt=D_a(mat(:),'D',size(mat)); + end +end + +%txt=regexprep(mat2str(mat),'\s+',','); +%txt=regexprep(txt,';',sprintf('],[')); +% if(nargin>=2 && size(mat,1)>1) +% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); +% end +if(any(isinf(mat(:)))) + txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); +end +if(any(isnan(mat(:)))) + txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); +end + +%%------------------------------------------------------------------------- +function newname=checkname(name,varargin) +isunpack=jsonopt('UnpackHex',1,varargin{:}); +newname=name; +if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) + return +end +if(isunpack) + isoct=jsonopt('IsOctave',0,varargin{:}); + if(~isoct) + newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); + else + pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); + pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); + if(isempty(pos)) return; end + str0=name; + pos0=[0 pend(:)' length(name)]; + newname=''; + for i=1:length(pos) + newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; + end + if(pos(end)~=length(name)) + newname=[newname str0(pos0(end-1)+1:pos0(end))]; + end + end +end +%%------------------------------------------------------------------------- +function val=S_(str) +if(length(str)==1) + val=['C' str]; +else + val=['S' I_(int32(length(str))) str]; +end +%%------------------------------------------------------------------------- +function val=I_(num) +if(~isinteger(num)) + error('input is not an integer'); +end +if(num>=0 && num<255) + val=['U' data2byte(swapbytes(cast(num,'uint8')),'uint8')]; + return; +end +key='iIlL'; +cid={'int8','int16','int32','int64'}; +for i=1:4 + if((num>0 && num<2^(i*8-1)) || (num<0 && num>=-2^(i*8-1))) + val=[key(i) data2byte(swapbytes(cast(num,cid{i})),'uint8')]; + return; + end +end +error('unsupported integer'); + +%%------------------------------------------------------------------------- +function val=D_(num) +if(~isfloat(num)) + error('input is not a float'); +end + +if(isa(num,'single')) + val=['d' data2byte(num,'uint8')]; +else + val=['D' data2byte(num,'uint8')]; +end +%%------------------------------------------------------------------------- +function data=I_a(num,type,dim,format) +id=find(ismember('iUIlL',type)); + +if(id==0) + error('unsupported integer array'); +end + +% based on UBJSON specs, all integer types are stored in big endian format + +if(id==1) + data=data2byte(swapbytes(int8(num)),'uint8'); + blen=1; +elseif(id==2) + data=data2byte(swapbytes(uint8(num)),'uint8'); + blen=1; +elseif(id==3) + data=data2byte(swapbytes(int16(num)),'uint8'); + blen=2; +elseif(id==4) + data=data2byte(swapbytes(int32(num)),'uint8'); + blen=4; +elseif(id==5) + data=data2byte(swapbytes(int64(num)),'uint8'); + blen=8; +end + +if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) + format='opt'; +end +if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) + if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) + cid=I_(uint32(max(dim))); + data=['$' type '#' I_a(dim,cid(1)) data(:)']; + else + data=['$' type '#' I_(int32(numel(data)/blen)) data(:)']; + end + data=['[' data(:)']; +else + data=reshape(data,blen,numel(data)/blen); + data(2:blen+1,:)=data; + data(1,:)=type; + data=data(:)'; + data=['[' data(:)' ']']; +end +%%------------------------------------------------------------------------- +function data=D_a(num,type,dim,format) +id=find(ismember('dD',type)); + +if(id==0) + error('unsupported float array'); +end + +if(id==1) + data=data2byte(single(num),'uint8'); +elseif(id==2) + data=data2byte(double(num),'uint8'); +end + +if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) + format='opt'; +end +if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) + if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) + cid=I_(uint32(max(dim))); + data=['$' type '#' I_a(dim,cid(1)) data(:)']; + else + data=['$' type '#' I_(int32(numel(data)/(id*4))) data(:)']; + end + data=['[' data]; +else + data=reshape(data,(id*4),length(data)/(id*4)); + data(2:(id*4+1),:)=data; + data(1,:)=type; + data=data(:)'; + data=['[' data(:)' ']']; +end +%%------------------------------------------------------------------------- +function bytes=data2byte(varargin) +bytes=typecast(varargin{:}); +bytes=bytes(:)'; diff --git a/machine-learning-ex3/lib/jsonlab/varargin2struct.m b/machine-learning-ex3/lib/jsonlab/varargin2struct.m new file mode 100644 index 0000000..9a5c2b6 --- /dev/null +++ b/machine-learning-ex3/lib/jsonlab/varargin2struct.m @@ -0,0 +1,40 @@ +function opt=varargin2struct(varargin) +% +% opt=varargin2struct('param1',value1,'param2',value2,...) +% or +% opt=varargin2struct(...,optstruct,...) +% +% convert a series of input parameters into a structure +% +% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) +% date: 2012/12/22 +% +% input: +% 'param', value: the input parameters should be pairs of a string and a value +% optstruct: if a parameter is a struct, the fields will be merged to the output struct +% +% output: +% opt: a struct where opt.param1=value1, opt.param2=value2 ... +% +% license: +% BSD, see LICENSE_BSD.txt files for details +% +% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) +% + +len=length(varargin); +opt=struct; +if(len==0) return; end +i=1; +while(i<=len) + if(isstruct(varargin{i})) + opt=mergestruct(opt,varargin{i}); + elseif(ischar(varargin{i}) && i 0; + Xm = [ -1 -1 ; -1 -2 ; -2 -1 ; -2 -2 ; ... + 1 1 ; 1 2 ; 2 1 ; 2 2 ; ... + -1 1 ; -1 2 ; -2 1 ; -2 2 ; ... + 1 -1 ; 1 -2 ; -2 -1 ; -2 -2 ]; + ym = [ 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 ]'; + t1 = sin(reshape(1:2:24, 4, 3)); + t2 = cos(reshape(1:2:40, 4, 5)); + + if partId == '1' + [J, grad] = lrCostFunction([0.25 0.5 -0.5]', X, y, 0.1); + out = sprintf('%0.5f ', J); + out = [out sprintf('%0.5f ', grad)]; + elseif partId == '2' + out = sprintf('%0.5f ', oneVsAll(Xm, ym, 4, 0.1)); + elseif partId == '3' + out = sprintf('%0.5f ', predictOneVsAll(t1, Xm)); + elseif partId == '4' + out = sprintf('%0.5f ', predict(t1, t2, Xm)); + end +end