基于C++与VS2012的HDF5文件处理(二)

例程学习:三维矩阵读写

  1 /************************************************************
  2
  3   This example shows how to read and write array datatypes
  4   to a dataset.  The program first writes integers arrays of
  5   dimension ADIM0xADIM1 to a dataset with a dataspace of
  6   DIM0, then closes the  file.  Next, it reopens the file,
  7   reads back the data, and outputs it to the screen.
  8
  9   This file is intended for use with HDF5 Library version 1.8
 10
 11  ************************************************************/
 12
 13 #include "hdf5.h"
 14 #include <stdio.h>
 15 #include <stdlib.h>
 16
 17 #define FILE            "h5ex_t_array.h5"
 18 #define DATASET         "DS1"
 19 #define DIM0            4
 20 #define ADIM0           3
 21 #define ADIM1           5
 22
 23 int
 24 main (void)
 25 {
 26     hid_t       file, filetype, memtype, space, dset;
 27                                                 /* Handles */
 28     herr_t      status;
 29     hsize_t     dims[1] = {DIM0},
 30                 adims[2] = {ADIM0, ADIM1};
 31     int         wdata[DIM0][ADIM0][ADIM1],      /* Write buffer */
 32                 ***rdata,                       /* Read buffer */
 33                 ndims;
 34     hsize_t     i, j, k;
 35
 36     /*
 37      * Initialize data.  i is the element in the dataspace, j and k the
 38      * elements within the array datatype.
 39      */
 40     for (i=0; i<DIM0; i++)
 41         for (j=0; j<ADIM0; j++)
 42             for (k=0; k<ADIM1; k++)
 43                 wdata[i][j][k] = i * j - j * k + i * k;
 44
 45     /*
 46      * Create a new file using the default properties.
 47      */
 48     file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
 49
 50     /*
 51      * Create array datatypes for file and memory.
 52      */
 53     filetype = H5Tarray_create (H5T_STD_I64LE, 2, adims);
 54     memtype = H5Tarray_create (H5T_NATIVE_INT, 2, adims);
 55
 56     /*
 57      * Create dataspace.  Setting maximum size to NULL sets the maximum
 58      * size to be the current size.
 59      */
 60     space = H5Screate_simple (1, dims, NULL);
 61
 62     /*
 63      * Create the dataset and write the array data to it.
 64      */
 65     dset = H5Dcreate (file, DATASET, filetype, space, H5P_DEFAULT, H5P_DEFAULT,
 66                 H5P_DEFAULT);
 67     status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT,
 68                 wdata[0][0]);
 69
 70     /*
 71      * Close and release resources.
 72      */
 73     status = H5Dclose (dset);
 74     status = H5Sclose (space);
 75     status = H5Tclose (filetype);
 76     status = H5Tclose (memtype);
 77     status = H5Fclose (file);
 78
 79
 80     /*
 81      * Now we begin the read section of this example.  Here we assume
 82      * the dataset and array have the same name and rank, but can have
 83      * any size.  Therefore we must allocate a new array to read in
 84      * data using malloc().
 85      */
 86
 87     /*
 88      * Open file and dataset.
 89      */
 90     file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
 91     dset = H5Dopen (file, DATASET, H5P_DEFAULT);
 92
 93     /*
 94      * Get the datatype and its dimensions.
 95      */
 96     filetype = H5Dget_type (dset);
 97     ndims = H5Tget_array_dims (filetype, adims);
 98
 99     /*
100      * Get dataspace and allocate memory for read buffer.  This is a
101      * three dimensional dataset when the array datatype is included so
102      * the dynamic allocation must be done in steps.
103      */
104     space = H5Dget_space (dset);
105     ndims = H5Sget_simple_extent_dims (space, dims, NULL);
106
107     /*
108      * Allocate array of pointers to two-dimensional arrays (the
109      * elements of the dataset.
110      */
111     rdata = (int ***) malloc (dims[0] * sizeof (int **));
112
113     /*
114      * Allocate two dimensional array of pointers to rows in the data
115      * elements.
116      */
117     rdata[0] = (int **) malloc (dims[0] * adims[0] * sizeof (int *));
118
119     /*
120      * Allocate space for integer data.
121      */
122     rdata[0][0] = (int *) malloc (dims[0] * adims[0] * adims[1] * sizeof (int));
123
124     /*
125      * Set the members of the pointer arrays allocated above to point
126      * to the correct locations in their respective arrays.
127      */
128     for (i=0; i<dims[0]; i++) {
129         rdata[i] = rdata[0] + i * adims[0];
130         for (j=0; j<adims[0]; j++)
131             rdata[i][j] = rdata[0][0] + (adims[0] * adims[1] * i) +
132                         (adims[1] * j);
133     }
134
135     /*
136      * Create the memory datatype.
137      */
138     memtype = H5Tarray_create (H5T_NATIVE_INT, 2, adims);
139
140     /*
141      * Read the data.
142      */
143     status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT,
144                 rdata[0][0]);
145
146     /*
147      * Output the data to the screen.
148      */
149     for (i=0; i<dims[0]; i++) {
150         printf ("%s[%d]:\n", DATASET, i);
151         for (j=0; j<adims[0]; j++) {
152             printf (" [");
153             for (k=0; k<adims[1]; k++)
154                 printf (" %3d", rdata[i][j][k]);
155             printf ("]\n");
156         }
157         printf("\n");
158     }
159
160     /*
161      * Close and release resources.
162      */
163     free (rdata[0][0]);
164     free (rdata[0]);
165     free (rdata);
166     status = H5Dclose (dset);
167     status = H5Sclose (space);
168     status = H5Tclose (filetype);
169     status = H5Tclose (memtype);
170     status = H5Fclose (file);
171
172     return 0;
173 }
时间: 2024-10-17 09:39:59

基于C++与VS2012的HDF5文件处理(二)的相关文章

进程交互-基于NOR Flash的嵌入式简易文件系统设计(3)

DIR 基于NOR Flash的嵌入式简易文件系统设计 PAGE 进程交互 SN 003 Version 000.000.001待完成 Author David Lin E-mail [email protected]     [email protected] Blog http://blog.csdn.net/linpeng12358 免责声明 本文不涉及本人所在公司任何项目,输出自本人在阅读Linux0.12源码及<Unix操作系统设计>过程中的心得体会,不存在任何泄露公司文件或者机密问

VS2005(vs2008,vs2010 VS2012)使用map文件查找程序崩溃原因

转载http://blog.csdn.net/luxiaoyu_sdc/article/details/6458872 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的方法来找原因,通过生成map文件,由于2005取消map文件生成行号信息(vc6.0下是可以生成行号信息的,不知道microsoft怎么想的,在2005上取消了),只能定位在那个函数发生崩溃.这里可以通过生成cod文件,即机器

【Python系列】HDF5文件介绍

一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group.在使用h5py的时候需要牢记一句话:groups类比词典,dataset类比Numpy中的数组. HDF5的dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输. 深度学习中也常用HDF5存储模型文件或数据集 import h5py  #导入工具包   im

django 基于form表单上传文件和基于ajax上传文件

一.基于form表单上传文件 1.html里是有一个input type="file" 和 'submit'的标签 2.vies.py def fileupload(request): if request.method == 'POST': print(request.POST) print(request.FILES) # from django.core.files.uploadedfile import InMemoryUploadedFile print(type(reque

sharepoint 2013基于AD的Form表单登录(二)——form登录页面自定义

配置好了sharepoint 2013基于AD的Form登录,只是成功了第一步,如何自定义登录页呢?特别是不要出现sharepoint2013自带登录页面,每次登录前还需要选择是否是form或者windows验证. 打开vs2012新建sharepoint 2013 project,在layouts目录下添加application page,页面命名为CustomLogin.aspx. 前台页面:为避免母版页中其他控件影响,注意继承的是simple.master         后台页面:继承F

构建基于Javascript的移动CMS——生成博客(二).路由

在有了上部分的基础之后,我们就可以生成一个博客的内容--BlogPosts Detail.这样就完成了我们这个移动CMS的几乎主要的功能了,有了上节想必对于我们来说要获取一个文章已经不是一件难的事情了. 获取每篇博客 于是我们照猫画虎地写了一个BlogDetail.js define([ 'jquery', 'underscore', 'mustache', 'text!/blog_details.html' ],function($, _, Mustache, blogDetailsTempl

php Laravel 框架之建立后台文件夹 二

在前面的章节中我们讲解过如何在 Laravel框架中建立后台文件夹. php Laravel 框架之建立后台文件夹 现在我们再添加一块内容.是关于自动加载的部分. 在我们app目录中还有个start目录.它里面这样写道: In addition to using Composer, you may use the Laravel class loader to load your controllers and models. This is useful for keeping all of

Python文件遍历二种方法

分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os.listdir()递归遍历.方法一:利用os.walkos.walk可以自顶向下或者自底向上遍历整个文件树,然后返回一个含有3个元素的tuple,(dirpath, dirnames, filenames).注意,os.walk()会返回一个generater,所以调用的时候一定要放到for循环中

Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听

请尊重他人的劳动成果,转载请注明出处: Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听 运行效果图: 我曾在<Android网络编程之使用HttpClient批量上传文件>一文中介绍过如何通过HttpClient实现多文件上传和服务器的接收.在上一篇主要使用Handler+HttpClient的方式实现文件上传.这一篇将介绍使用AsyncTask+HttpClient实现文件上传并监听上传进度. 监控进度实现: 首先