首页 > 编程语言 >java 读取 hdf5 文件数据

java 读取 hdf5 文件数据

时间:2022-11-03 19:11:48浏览次数:41  
标签:java 读取 hdf5 datasetInfo System jhdf new import

import static java.util.stream.Collectors.joining;

import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;

import hdf.hdf5lib.H5;
import hdf.hdf5lib.HDF5Constants;
import io.jhdf.HdfFile;
import io.jhdf.api.Dataset;
import io.jhdf.api.Group;
import io.jhdf.api.Node;

public class Hdf5LibBenchmark {

    private static final String TEST_FILE = "/home/james/git/jhdf.git/jhdf/src/test/resources/io/jhdf/test_large_datasets_earliest.hdf5";
    private static final int REPEATS = 1000;

    private static final Map<Class<?>, Integer> hdf5TypesMap;
    static {
        hdf5TypesMap = new HashMap<>();
        hdf5TypesMap.put(int.class, HDF5Constants.H5T_NATIVE_INT32);
        hdf5TypesMap.put(double.class, HDF5Constants.H5T_NATIVE_DOUBLE);
    }

    public static void main(String[] args) throws Exception {

        List<DatasetInfo> datasets = new ArrayList<>();

        try (HdfFile hdfFile = new HdfFile(new File(TEST_FILE))) {
            recursivlyGetDatasets(hdfFile, datasets);
            System.out.println("Datasets to benchmark: "
                    + datasets.stream().map(DatasetInfo::getPath).collect(joining(", ")));
        } // Closes the file here

        for (DatasetInfo datasetInfo : datasets) {
            System.out.println("Benchmarking: " + datasetInfo.getPath());

            Object jHdfData;

            // First do jHDF
            try (HdfFile hdfFile = new HdfFile(new File(TEST_FILE))) {
                Dataset dataset = hdfFile.getDatasetByPath(datasetInfo.getPath());

                Object data = null;

                double[] results = new double[REPEATS];
                for (int i = 0; i < REPEATS; i++) {

                    // Here we actually time reading the data from the file into a Java object
                    long start = System.currentTimeMillis();

                    data = dataset.getData();

                    long took = System.currentTimeMillis() - start;

                    results[i] = took;
                }
                DescriptiveStatistics stats = new DescriptiveStatistics(results);
                System.out.println("jHDF results for: " + datasetInfo.getPath());
                System.out.println(stats.toString());

                // Keep the last time the data is read for equivalence check
                jHdfData = data;

            } // Close the jHDF file here

            // Now test the HDF5 group libiary

            // Open file using the default properties.
            int fileId = H5.H5Fopen(TEST_FILE, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
            // Open dataset using the default properties.
            int datasetId = H5.H5Dopen(fileId, datasetInfo.getPath(), HDF5Constants.H5P_DEFAULT);
            // Make the array to fill. jHDF does this internally
            Object data = Array.newInstance(datasetInfo.getType(), datasetInfo.getDims());

            double[] results = new double[REPEATS];
            for (int i = 0; i < REPEATS; i++) {

                // Here we actually time reading the data from the file into a Java object
                long start = System.currentTimeMillis();

                H5.H5Dread(datasetId, hdf5TypesMap.get(datasetInfo.getType()), HDF5Constants.H5S_ALL,
                        HDF5Constants.H5S_ALL,
                        HDF5Constants.H5P_DEFAULT, data);

                long took = System.currentTimeMillis() - start;

                results[i] = took;
            }
            DescriptiveStatistics stats = new DescriptiveStatistics(results);
            System.out.println("HDF5 Group results for: " + datasetInfo.getPath());
            System.out.println(stats.toString());

            // Close the dataset.
            H5.H5Dclose(datasetId);
            // Close the file.
            H5.H5Fclose(fileId);

            // Now a sanity check compare th
            System.out.println(
                    "Arrays are equal? " + Arrays.deepEquals(new Object[] { data }, new Object[] { jHdfData }));

        }
    }

    private static void recursivlyGetDatasets(Group group, List<DatasetInfo> datasets) {
        for (Node node : group) {
            if (node instanceof Group) {
                Group group2 = (Group) node;
                recursivlyGetDatasets(group2, datasets);
            } else if (node instanceof Dataset) {
                datasets.add(new DatasetInfo((Dataset) node));
            }
        }
    }

    private static class DatasetInfo {

        private final String path;
        private final int[] dims;
        private final Class<?> type;

        public DatasetInfo(Dataset dataset) {
            this.path = dataset.getPath();
            this.dims = dataset.getDimensions();
            this.type = dataset.getJavaType();
        }

        public String getPath() {
            return path;
        }

        public int[] getDims() {
            return dims;
        }

        public Class<?> getType() {
            return type;
        }

    }

}
<dependency>
<groupId>cisd</groupId>
<artifactId>jhdf5</artifactId>
<version>14.12.6</version>
</dependency>

<dependency>
<groupId>io.jhdf</groupId>
<artifactId>jhdf</artifactId>
<version>0.5.8</version>
</dependency>

标签:java,读取,hdf5,datasetInfo,System,jhdf,new,import
From: https://www.cnblogs.com/Husir-boky/p/16855534.html

相关文章

  • ES的java端API操作
    首先简单介绍下写这篇博文的背景,最近负责的一个聚合型的新项目要大量使用ES的检索功能,之前对es的了解还只是纯理论最多加个基于postman的索引创建操作,所以这次我得了解在ja......
  • Java 语音基础知识点 笔记
    Java语音基础知识点笔记(1)什么是变量?变量分为哪几类?String是最基本的数据类型吗?char型变量中能不能储存一个中文汉字?为什么?赋值语句“floatf=3.4;"是否正确?(2)Java中有没......
  • javascript - 练习题:浅层克隆和深层克隆
    浅层克隆问:把obj 对象的内容,克隆到ojb1 上去。 varobj={name:'abc',age:123,sex:"female"}varobj1={}分析:这个没有引用值的对象,可以使用浅层克隆......
  • IDEA用Java创建删除文件,获取文件相关信息,创建删除目录操作
     目录   一、Java创建文件的三种方式二、Java删除文件三、Java获取文件相关信息四、创建删除目录操作五、Java删除目......
  • 中介者模式——java实现
    在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具体聊天室中发送的图片大小不得超过20M。2.新的具体聊天室中发送的文字长度不得......
  • JAVA自定义比较器(自定义规格)
    事情是政治面貌1群众2党员3团员。需求就是要把2在最前,之后是1,之后是3。对于以后再加入的类型都排在后面。也就是说既不是按照升序也不是按照降序要根据2>1>3>4>5>......
  • Java实现ip属地功能开发教程 | ip2region2.x使用总结
    ip属地功能开发-ip2region2.x使用总结一、前言如今许多软件如B站、微博、抖音等都加上IP归属地防止恶意评论,境外用户显示的是国家,国内的用户显示的省份。兴致一起,我便......
  • linux java 初始环境配置
    linux初始环境配置 1.设置IP查看虚拟机ip地址:ipaddr 修改ip地址Vi/etc/sysconfig/network~scrips/ifcfg-ens33(不一定是33动态的)BOOTPROTO=static在......
  • Java单例模式,看这一篇就够了
    在创建型设计模式中,我们第一个学习的是单例模式(SingletonPattern),这是设计模式中最简单的模式之一。 单例是什么意思呢? 单例就是单实例的意思,即在系统全局,一个类只创......
  • Java获取小数点后几位
    学习中遇见保留1小数点后位,选择有四种方法:方法:1、用format方法,语法“String.format("%.2f",数值)”;2、用DecimalFormat的format方法;3、用setScale方法进行四舍五入;4、用set......