SUM_SQUAREFORM - sparse matrix that sums the squareform of a vector

Usage

[S, St] = sum_squareform(n)
[S, St] = sum_squareform(n, mask)

Input parameters

n size of matrix W
mask if given, S only contain the columns indicated by the mask

Output parameters

S matrix so that S*w = sum(W) for vector w = squareform(W)
St the adjoint of S

Description

Creates sparse matrices S, St = S' so that
S*w = sum(W), where w = squareform(W)

The mask is used for large scale computations where only a few non-zeros in W are to be summed. It needs to be the same size as w, n(n-1)/2 elements. See the example below for more details of usage.

Properties of S: * size(S) = [n, (n(n-1)/2)] % if no mask is given. * size(S, 2) = nnz(w) % if mask is given * norm(S)^2 = 2(n-1) * sum(S) = 2*ones(1, n*(n-1)/2) * sum(St) = sum(squareform(mask)) -- for full mask = (n-1)*ones(n,1)

Example::
% if mask is given, the resulting S are the ones we would get with the % following operations (but memory efficiently): [S, St] = sum_squareform(n); [ind_i, ~, w] = find(mask(:)); % get rid of the columns of S corresponding to zeros in the mask S = S(:, ind_i); St = St(ind_i, :);