Giter VIP home page Giter VIP logo

hdf5.jl's Introduction

HDF5 interface for the Julia language

Build Status Build status Coverage Status

HDF5 is a file format and library for storing and accessing data, commonly used for scientific data. HDF5 files can be created and read by numerous programming languages. This package provides an interface to the HDF5 library for the Julia language.

Julia data (*.jld) and Matlab (*.mat) files

The core HDF5 functionality is the foundation for two special-purpose packages, used to read and write HDF5 files with specific formatting conventions. The first is the JLD ("Julia data") package, which implements a generic mechanism for reading and writing Julia variables. While one can use "plain" HDF5 for this purpose, the advantage of the JLD package is that it preserves the exact type information of each variable.

The other functionality provided through HDF5 is the ability to read and write Matlab *.mat files saved as "-v7.3". The Matlab-specific portions have been moved to Simon Kornblith's MAT.jl package.

Installation

Within Julia, use the package manager:

Pkg.add("HDF5")

You also need to have the HDF5 library installed on your system (version 1.8 or higher is required), but for most users no additional steps should be required; the HDF5 library should be installed for you automatically when you add the package.

If you have to install the HDF5 library manually, here are some examples of how to do it:

  • Debian/(K)Ubuntu: apt-get -u install hdf5-tools
  • OSX: brew tap homebrew/science; brew install hdf5 (using Homebrew)
  • Windows: It is highly recommended that you use the HDF5 library fetched by this package. Other HDF5 binaries may be compiled against a different C runtime from the Julia binary, which will cause Julia to crash when freeing memory allocated by libhdf5.

If you've installed the library but discover that Julia is not finding it, you can add the path to Julia's Libdl.DL_LOAD_PATH variable, e.g.,

push!(Libdl.DL_LOAD_PATH, "/opt/local/lib")
Pkg.build("HDF5")

Inserting this command into your .juliarc.jl file will cause this to happen automatically each time you start Julia.

If you're on Linux but you do not have root privileges on your machine (and you can't persuade the sysadmin to install the libraries for you), you can download the binaries and place them somewhere in your home directory. To use HDF5, you'll have to start julia as

LD_LIBRARY_PATH=/path/to/hdf5/libs julia

You can set up an alias so this happens for you automatically each time you start julia.

Quickstart

Begin your code with

using HDF5

To read and write a variable to a file, one approach is to use the filename:

A = reshape(1:120, 15, 8)
h5write("/tmp/test2.h5", "mygroup2/A", A)
data = h5read("/tmp/test2.h5", "mygroup2/A", (2:3:15, 3:5))

where the last line reads back just A[2:3:15, 3:5] from the dataset.

More fine-grained control can be obtained using functional syntax:

h5open("mydata.h5", "w") do file
    write(file, "A", A)  # alternatively, say "@write file A"
end

c = h5open("mydata.h5", "r") do file
    read(file, "A")
end

This allows you to add variables as they are generated to an open HDF5 file. You don't have to use the do syntax (file = h5open("mydata.h5", "w") works just fine), but an advantage is that it will automatically close the file (close(file)) for you, even in cases of error.

Julia's high-level wrapper, providing a dictionary-like interface, may also be of interest:

using HDF5

h5open("test.h5", "w") do file
    g = g_create(file, "mygroup") # create a group
    g["dset1"] = 3.2              # create a scalar dataset inside the group
    attrs(g)["Description"] = "This group contains only a single dataset" # an attribute
end

Convenience functions for attributes attached to datasets are also provided:

  A=[1:10]
  h5write("bar.h5", "foo", A)
  h5writeattr("bar.h5", "foo", Dict("c"=>"value for metadata parameter c","d"=>"metadata d"))
  h5readattr("bar.h5", "foo")

Specific file formats

There is no conflict in having multiple modules (HDF5, JLD, and MAT) available simultaneously; the formatting of the file is determined by the open command.

Complete documentation

The HDF5 API is much more extensive than suggested by this brief introduction. More complete documentation is found in the doc/ directory.

The test/ directory contains a number of test scripts that also demonstrate usage.

Credits

  • Konrad Hinsen initiated Julia's support for HDF5

  • Tim Holy and Simon Kornblith (co-maintainers and primary authors)

  • Tom Short contributed code and ideas to the dictionary-like interface

  • Blake Johnson made several improvements, such as support for iterating over attributes

  • Isaiah Norton and Elliot Saba improved installation on Windows and OSX

  • Steve Johnson contributed the do syntax and Blosc compression

  • Mike Nolta and Jameson Nash contributed code or suggestions for improving the handling of HDF5's constants

  • Thanks also to the users who have reported bugs and tested fixes

hdf5.jl's People

Contributors

andygreenwell avatar avrahamruderman avatar bjarthur avatar blakejohnson avatar carlobaldassi avatar catawbasam avatar cdsousa avatar davidavdav avatar dmbates avatar eschnett avatar ggggggggg avatar ihnorton avatar joa-quim avatar jpata avatar jpfairbanks avatar jtravs avatar jutho avatar mbauman avatar michaelhatherly avatar petercolberg avatar powerdistribution avatar rened avatar samuelpowell avatar scheidan avatar simonster avatar staticfloat avatar stevengj avatar timholy avatar tkelman avatar yuyichao avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.