特别地,我想只加载存储在.mat文件中的某个变量的一些部分。
Matlab支持该文件版本的这个功能,使用命令matfile(更多信息请参见这里)。
我想要实现的一个很好的例子可以在这个答案中找到。
我需要处理的文件包含1xN行,例如字段Date,如您在下面的图片中所见:
![enter image description here](https://istack.dev59.com/3FVRR.webp)
我找不到任何能够支持.mat v7.3的Java库,但由于该文件版本是基于HDF5的,所以我尝试实现一个将文件视为HDF5文件进行处理的解决方案。 我正在使用JHDF库,但我无法确定它是否支持类似matfile的命令。
特别地,我想从Duration字段中提取数据,只有当Date字段具有特定值时。Date包含以升序排列的整数值格式为yyyymmdd的日期。
假设我想在Date = 20230211时读取Duration的数据。我使用JHDF实现了以下代码:
HdfFile hdfFile = new HdfFile(Paths.get("file.mat"));
int[] dateArr = (int[]) hdfFile.getDatasetByPath("/Task/Date").getDataFlat();
if (dateArr.length > 0) {
int startIdx = 0;
int finalIdx = dateArr.length - 1;
for (int i = 0; i < dateArr.length; i++) {
if (dateArr[i] == 20230211) {
startIdx = i;
break;
}
}
for (int i = startIdx + 1; i < dateArr.length; i++) {
if (dateArr[i] > 20230211) {
finalIdx = i - 1;
break;
}
}
float[] duration = (float[]) hdfFile.getDatasetByPath("/Task/Duration").getDataFlat();
float[] desiredDuration = Arrays.copyOfRange(duration, startIdx, finalIdx + 1);
}
你知道我可以用Java模拟matfile命令吗?
Dataset#getData(long[] sliceOffset, int[] sliceDimensions)
这个方法,它可以读取数据集的一部分。 - James MuddDataset#getData(long[] sliceOffset, int[] sliceDimensions)
,它可以读取数据集的一部分。 - James Mudd