Skip to content

Commit 63b1e8d

Browse files
committed
add [h5,nc]ndims
1 parent b6425f0 commit 63b1e8d

File tree

5 files changed

+89
-0
lines changed

5 files changed

+89
-0
lines changed

+stdlib/+hdf5nc/h5ndims.m

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function frank = h5ndims(file, variable)
2+
% get number of dimensions of an HDF5 dataset
3+
%
4+
% filename: HDF5 filename
5+
% variable: name of variable inside file
6+
%
7+
arguments
8+
file (1,1) string {mustBeNonzeroLengthText}
9+
variable (1,1) string {mustBeNonzeroLengthText}
10+
end
11+
12+
import stdlib.fileio.expanduser
13+
14+
file = expanduser(file);
15+
16+
assert(isfile(file), "%s not found", file)
17+
18+
dsi = h5info(file, variable).Dataspace;
19+
if dsi.Type == "scalar"
20+
frank = 0;
21+
else
22+
frank = length(dsi.Size);
23+
end
24+
25+
end

+stdlib/+hdf5nc/ncndims.m

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function frank = ncndims(file, variable)
2+
% get number of dimensions of a NetCDF4 variable
3+
%
4+
% filename: NetCDF4 filename
5+
% variable: name of variable inside file
6+
7+
arguments
8+
file (1,1) string {mustBeNonzeroLengthText}
9+
variable (1,1) string {mustBeNonzeroLengthText}
10+
end
11+
12+
import stdlib.fileio.expanduser
13+
14+
file = expanduser(file);
15+
16+
assert(isfile(file), "%s not found", file)
17+
18+
dsi = ncinfo(file, variable);
19+
if isempty(dsi.Dimensions)
20+
frank = 0;
21+
else
22+
frank = length(dsi.Size);
23+
end
24+
25+
end

+stdlib/TestHDF5.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,26 +113,38 @@ function test_exists(tc, vars)
113113

114114
function test_size(tc)
115115
import stdlib.hdf5nc.h5size
116+
import stdlib.hdf5nc.h5ndims
116117
basic = tc.TestData.basic;
117118

119+
r = h5ndims(basic, '/A0');
118120
s = h5size(basic, '/A0');
119121
tc.verifyEmpty(s)
122+
tc.verifyEqual(r, 0)
120123

124+
r = h5ndims(basic, '/A1');
121125
s = h5size(basic, '/A1');
122126
tc.verifyTrue(isscalar(s))
123127
tc.verifyEqual(s, 2)
128+
tc.verifyEqual(r, 1)
124129

130+
r = h5ndims(basic, '/A2');
125131
s = h5size(basic, '/A2');
126132
tc.verifyTrue(isvector(s))
127133
tc.verifyEqual(s, [4,4])
134+
tc.verifyEqual(r, 2)
128135

136+
r = h5ndims(basic, '/A3');
129137
s = h5size(basic, '/A3');
130138
tc.verifyTrue(isvector(s))
131139
tc.verifyEqual(s, [4,3,2])
140+
tc.verifyEqual(r, 3)
132141

142+
r = h5ndims(basic, '/A4');
133143
s = h5size(basic, '/A4');
134144
tc.verifyTrue(isvector(s))
135145
tc.verifyEqual(s, [4,3,2,5])
146+
tc.verifyEqual(r, 4)
147+
136148
end
137149

138150

+stdlib/TestNetCDF.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,27 +79,38 @@ function test_exists(tc, vars)
7979

8080
function test_size(tc)
8181
import stdlib.hdf5nc.ncsize
82+
import stdlib.hdf5nc.ncndims
8283
import matlab.unittest.constraints.IsScalar
8384
basic = tc.TestData.basic;
8485

86+
r = ncndims(basic, 'A0');
8587
s = ncsize(basic, 'A0');
8688
tc.verifyEmpty(s)
89+
tc.verifyEqual(r, 0)
8790

91+
r = ncndims(basic, 'A1');
8892
s = ncsize(basic, 'A1');
8993
tc.verifyThat(s, IsScalar)
9094
tc.verifyEqual(s, 2)
95+
tc.verifyEqual(r, 1)
9196

97+
r = ncndims(basic, 'A2');
9298
s = ncsize(basic, 'A2');
9399
tc.verifyTrue(isvector(s))
94100
tc.verifyEqual(s, [4,4])
101+
tc.verifyEqual(r, 2)
95102

103+
r = ncndims(basic, 'A3');
96104
s = ncsize(basic, 'A3');
97105
tc.verifyTrue(isvector(s))
98106
tc.verifyEqual(s, [4,3,2])
107+
tc.verifyEqual(r, 3)
99108

109+
r = ncndims(basic, 'A4');
100110
s = ncsize(basic, 'A4');
101111
tc.verifyTrue(isvector(s))
102112
tc.verifyEqual(s, [4,3,2,5])
113+
tc.verifyEqual(r, 4)
103114

104115
end
105116

Readme.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ h5save(filename, dataset_name, dataset, "type", "int32")
5656

5757
---
5858

59+
Get the dataset rank (number of dimensions)
60+
61+
```matlab
62+
h5ndims(filename, variable_name)
63+
```
64+
65+
---
66+
5967
Get the dataset size (shape)
6068

6169
```matlab
@@ -99,6 +107,14 @@ ncsave(filename, variable_name, variable)
99107

100108
---
101109

110+
Get the variable rank (number of dimensions)
111+
112+
```matlab
113+
ncndims(filename, variable_name)
114+
```
115+
116+
---
117+
102118
Get the dataset size (shape)
103119

104120
```matlab

0 commit comments

Comments
 (0)