-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Description
Consider this code:
int main()
{
arma::mat M = arma::linspace(1, 10, 10);
M.reshape(2, 5);
std::cout << "my M shape is:"
<< "\n";
M.brief_print();
auto h = h5::create("test.h5", H5F_ACC_TRUNC);
h5::write(h, "/test", M);
std::cout << "reading back..."
<< "\n";
M = h5::read<arma::mat>("test.h5", "/test");
std::cout << "my M shape is:"
<< "\n";
M.brief_print();
return 0;
}
That give this output:
my M shape is:
[matrix size: 2x5]
1.0000 3.0000 5.0000 7.0000 9.0000
2.0000 4.0000 6.0000 8.0000 10.0000
reading back...
my M shape is:
[matrix size: 5x2]
1.0000 6.0000
2.0000 7.0000
3.0000 8.0000
4.0000 9.0000
5.0000 10.0000
That looks wrong in h5dump:
HDF5 "test.h5" {
GROUP "/" {
DATASET "test" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 5, 2 ) / ( 5, 2 ) }
DATA {
(0,0): 1, 2,
(1,0): 3, 4,
(2,0): 5, 6,
(3,0): 7, 8,
(4,0): 9, 10
}
}
}
}
What I expected is:
my M shape is:
[matrix size: 2x5]
1.0000 3.0000 5.0000 7.0000 9.0000
2.0000 4.0000 6.0000 8.0000 10.0000
reading back...
my M shape is:
[matrix size: 2x5]
1.0000 3.0000 5.0000 7.0000 9.0000
2.0000 4.0000 6.0000 8.0000 10.0000
Which is fine in h5dump too:
HDF5 "test.h5" {
GROUP "/" {
DATASET "test" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 2, 5 ) / ( 2, 5 ) }
DATA {
(0,0): 1, 2, 3, 4, 5,
(1,0): 6, 7, 8, 9, 10
}
}
}
}
To have what I expected I must revert the commit "arma matrix rows/cols swapped to correct C/Fortran order mismatch" (be0a191)
Can you confirm that something is wrong in the library or I'm doing something stupid? :)
Metadata
Metadata
Assignees
Labels
No labels