174 lines
5.9 KiB
Mathematica
174 lines
5.9 KiB
Mathematica
|
function [ Similarities, PrecalcQ2s, PrecalcQ2sFlat, PrecalcYqDs ] = CalculateSimilarities_sparsity( n_sequences, x, similarityFNs, sparsityFNs, y, const)
|
||
|
%CALCULATESIMILARITIES Summary of this function goes here
|
||
|
% Detailed explanation goes here
|
||
|
|
||
|
K = numel(similarityFNs);
|
||
|
K2 = numel(sparsityFNs);
|
||
|
|
||
|
%calculate similarity measures for each of the sequences
|
||
|
Similarities = cell(n_sequences, 1);
|
||
|
PrecalcQ2s = cell(n_sequences,1);
|
||
|
PrecalcQ2sFlat = cell(n_sequences,1);
|
||
|
|
||
|
PrecalcYqDs = zeros(n_sequences, K + K2);
|
||
|
|
||
|
if(iscell(x))
|
||
|
for q = 1 : n_sequences
|
||
|
|
||
|
xq = x{q};
|
||
|
|
||
|
n = size(xq, 1);
|
||
|
Similarities{q} = zeros([n, n, K+K2]);
|
||
|
|
||
|
PrecalcQ2s{q} = cell(K+K2,1);
|
||
|
|
||
|
PrecalcQ2sFlat{q} = zeros((n*(n+1))/2,K+K2);
|
||
|
% go over all of the similarity metrics and construct the
|
||
|
% similarity matrices
|
||
|
|
||
|
if(nargin > 4)
|
||
|
yq = y{q};
|
||
|
end
|
||
|
|
||
|
for k=1:K
|
||
|
Similarities{q}(:,:,k) = similarityFNs{k}(xq);
|
||
|
S = Similarities{q}(:,:,k);
|
||
|
D = diag(sum(S));
|
||
|
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||
|
PrecalcQ2s{q}{k} = D - S;
|
||
|
B = D - S;
|
||
|
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||
|
PrecalcQ2sFlat{q}(:,k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(q,k) = -yq'*B*yq;
|
||
|
end
|
||
|
end
|
||
|
for k=1:K2
|
||
|
Similarities{q}(:,:,K+k) = sparsityFNs{k}(xq);
|
||
|
S = Similarities{q}(:,:,K+k);
|
||
|
D = diag(sum(S));
|
||
|
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||
|
PrecalcQ2s{q}{K+k} = D + S;
|
||
|
B = D + S;
|
||
|
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||
|
PrecalcQ2sFlat{q}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(q,K+k) = -yq'*B*yq;
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
elseif(~const)
|
||
|
sample_length = size(x,2)/n_sequences;
|
||
|
|
||
|
similarities = cell(K, 1);
|
||
|
sparsities = cell(K2, 1);
|
||
|
|
||
|
for q = 1 : n_sequences
|
||
|
|
||
|
beg_ind = (q-1)*sample_length + 1;
|
||
|
end_ind = q*sample_length;
|
||
|
|
||
|
% don't take the bias term
|
||
|
xq = x(2:end, beg_ind:end_ind);
|
||
|
|
||
|
Similarities{q} = zeros([sample_length, sample_length, K+K2]);
|
||
|
|
||
|
PrecalcQ2s{q} = cell(K+K2,1);
|
||
|
|
||
|
PrecalcQ2sFlat{q} = zeros((sample_length*(sample_length+1))/2,K+K2);
|
||
|
|
||
|
% go over all of the similarity metrics and construct the
|
||
|
% similarity matrices
|
||
|
|
||
|
if(nargin > 4)
|
||
|
yq = y(:,q);
|
||
|
end
|
||
|
|
||
|
for k=1:K
|
||
|
if(q==1)
|
||
|
similarities{k} = similarityFNs{k}(xq);
|
||
|
end
|
||
|
Similarities{q}(:,:,k) = similarities{k};
|
||
|
S = Similarities{q}(:,:,k);
|
||
|
D = diag(sum(S));
|
||
|
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||
|
PrecalcQ2s{q}{k} = D - S;
|
||
|
B = D - S;
|
||
|
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||
|
PrecalcQ2sFlat{q}(:,k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(q,k) = -yq'*B*yq;
|
||
|
end
|
||
|
end
|
||
|
for k=1:K2
|
||
|
% this is constant so don't need to recalc
|
||
|
if(q==1)
|
||
|
sparsities{k} = sparsityFNs{k}(xq);
|
||
|
end
|
||
|
|
||
|
Similarities{q}(:,:,K+k) = sparsities{k};
|
||
|
S = Similarities{q}(:,:,K+k);
|
||
|
D = diag(sum(S));
|
||
|
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||
|
PrecalcQ2s{q}{K+k} = D + S;
|
||
|
B = D + S;
|
||
|
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||
|
PrecalcQ2sFlat{q}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(q,K+k) = -yq'*B*yq;
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
else
|
||
|
sample_length = size(x,2)/n_sequences;
|
||
|
|
||
|
similarities = cell(K, 1);
|
||
|
sparsities = cell(K2, 1);
|
||
|
|
||
|
PrecalcQ2s = {cell(K+K2,1)};
|
||
|
PrecalcQ2sFlat = {zeros((sample_length*(sample_length+1))/2,K+K2)};
|
||
|
Similarities = {zeros([sample_length, sample_length, K+K2])};
|
||
|
|
||
|
beg_ind = 1;
|
||
|
end_ind = sample_length;
|
||
|
|
||
|
% don't take the bias term
|
||
|
xq = x(2:end, beg_ind:end_ind);
|
||
|
|
||
|
% go over all of the similarity metrics and construct the
|
||
|
% similarity matrices
|
||
|
for k=1:K
|
||
|
similarities{k} = similarityFNs{k}(xq');
|
||
|
|
||
|
Similarities{1}(:,:,k) = similarities{k};
|
||
|
S = Similarities{1}(:,:,k);
|
||
|
D = diag(sum(S));
|
||
|
PrecalcQ2s{1}{k} = D - S;
|
||
|
B = D - S;
|
||
|
% flatten the symmetric matrix to save space
|
||
|
PrecalcQ2sFlat{1}(:,k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(:,k) = diag(-y'*B*y);
|
||
|
end
|
||
|
end
|
||
|
for k=1:K2
|
||
|
% this is constant so don't need to recalc
|
||
|
sparsities{k} = sparsityFNs{k}(xq');
|
||
|
|
||
|
Similarities{1}(:,:,K+k) = sparsities{k};
|
||
|
S = Similarities{1}(:,:,K+k);
|
||
|
D = diag(sum(S));
|
||
|
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||
|
PrecalcQ2s{1}{K+k} = D + S;
|
||
|
B = D + S;
|
||
|
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||
|
PrecalcQ2sFlat{1}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||
|
if(nargin > 4)
|
||
|
PrecalcYqDs(:,K+k) = diag(-y'*B*y);
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|