# spmin

Below is a demonstration of the features of the spmin function

## Contents

clear; close all; clc;

## Syntax

[minVal,minInd]=spmin(A,B,dim,nanflag,logicRelevant,nanOut);

## Examples

Create example matrix

i=[2 1 1 2  2 3  3 4 4 5  5 5 6 6 7 8];
j=[1 1 2 3  4 5  6 7 8 9 10 11 12 13 13 13];
s=[-1 3 1 2 -1 1 -2 5 5 -1 0 2 3 10 11 NaN];
siz=max([i(:);j(:)]+1)*ones(1,2);
A=sparse(i,j,s,siz(1),siz(2),numel(s));
A=A+A';

full(A) % View matrix

L=sparse(i,j,1,siz(1),siz(2),numel(s));
logicRelevant=(L+L')>0;
ans =

Columns 1 through 13

6     0     0     0     0     0     0     0     0     0     0     0     0
0     0     2    -1     0     0     0     0     0     0     0     0     0
0     2     0     0     1    -2     0     0     0     0     0     0     0
0    -1     0     0     0     0     5     5     0     0     0     0     0
0     0     1     0     0     0     0     0    -1     0     2     0     0
0     0    -2     0     0     0     0     0     0     0     0     3    10
0     0     0     5     0     0     0     0     0     0     0     0    11
0     0     0     5     0     0     0     0     0     0     0     0   NaN
0     0     0     0    -1     0     0     0     0     0     0     0     0
0     0     0     0     0     0     0     0     0     0     0     0     0
0     0     0     0     2     0     0     0     0     0     0     0     0
0     0     0     0     0     3     0     0     0     0     0     0     0
0     0     0     0     0    10    11   NaN     0     0     0     0     0
0     0     0     0     0     0     0     0     0     0     0     0     0

Column 14

0
0
0
0
0
0
0
0
0
0
0
0
0
0

Compute minima allong a certain direction (while omit nan is default)

aMinRows=spmin(A,[],1);
full(aMinRows)

aMinColumns=spmin(A,[],2);
full(aMinColumns)
ans =

Columns 1 through 13

6    -1    -2    -1    -1    -2     5     5    -1     0     2     3    10

Column 14

0

ans =

6
-1
-2
-1
-1
-2
5
5
-1
0
2
3
10
0

Including nans

aMinRows=spmin(A,[],1,'includenan');
full(aMinRows)

aMinColumns=spmin(A,[],2,'includenan');
full(aMinColumns)
ans =

Columns 1 through 13

6    -1    -2    -1    -1    -2     5   NaN    -1     0     2     3   NaN

Column 14

0

ans =

6
-1
-2
-1
-1
-2
5
NaN
-1
0
2
3
NaN
0

Computing minima across all desired relevant entries (including "relevant/real zeros")

aMinRows=spmin(A,[],1,'omitnan',logicRelevant);
full(aMinRows)

aMinColumns=spmin(A,[],2,'omitnan',logicRelevant);
full(aMinColumns)
ans =

Columns 1 through 13

0    -1    -2    -1    -1    -2     5     5    -1     0     2     3    10

Column 14

0

ans =

0
-1
-2
-1
-1
-2
5
5
-1
0
2
3
10
0

Computin minima across all desired relevant entries and output NaN where the sparse array only contains "non-relevant or non-real" zeros.

nanOut=1;

aMinRows=spmin(A,[],1,'omitnan',logicRelevant,nanOut);
full(aMinRows)

aMinColumns=spmin(A,[],2,'omitnan',logicRelevant,nanOut);
full(aMinColumns)
ans =

Columns 1 through 13

0    -1    -2    -1    -1    -2     5     5    -1     0     2     3    10

Column 14

NaN

ans =

0
-1
-2
-1
-1
-2
5
5
-1
0
2
3
10
NaN

GIBBON www.gibboncode.org

Kevin Mattheus Moerman, [email protected]

GIBBON footer text

GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.

Copyright (C) 2006-2021 Kevin Mattheus Moerman and the GIBBON contributors

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.