Hello
Great question. I hadn't (really) noticed the HDF5 file format before now. I think I will give that some thought.
The file format is described at this site [link:www.hdfgroup.org] . Also the needed DLLs (the API they call it) are found here.
There is an .Net-wrapper (running with framework 2.0 it seems) here ftp://ftp.hdfgroup.uiuc.edu/pub/outgoing/hdf5/Csharp-prototype/ .
Usage is something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13
let myNativeData = [| 3.; 1.; 4.; 1.; 5.; 9.; 2.; 6.; 5. |] #r @"HDF5DotNet.dll" open HDF5DotNet let myFile = H5F.create(@"MyFile.hdf5", H5F.CreateMode.ACC_TRUNC) // cannot be done: let myArray = new H5Array<double> (myNativeData) let myArray = null: H5Array<double> let myDataTypeId = new H5DataTypeId (H5T.H5Type.IEEE_F64LE) let myDataSpaceId = H5S.create_simple (1, [| uint64 (myNativeData.Length) |]) let myDataSetID = H5D.create(myFile, "MyDataSetsName", myDataTypeId, myDataSpaceId) do H5D.write(myDataSetID, myDataTypeId, myArray); do H5F.close myFile
The problem is that F# throws a compile error my way because the class H5Array has some nice multi-dimensional constructors. Maybe someone knows how to override this behaviour(?).
Best regards
Robert Nielsen
Hello
Great question. I hadn't (really) noticed the HDF5 file format before now. I think I will give that some thought
Hi Robert. This sounds promising: let me know what you find!
Hi CSMR
I've googled a bit.
At this site Unidata Program Center I found a project called "netCDF". They provide some DLLs that allow us to write HDF5-files. It appears that writing HDF5-files is only a secondary objective for them, so the functionality is a bit crude compared to "The HDF Group"-library mentioned in my earlier answer. Sometimes simplicity is what we want though, so why not give this 'solution' a test run.
First download the newest set of
software libraries, it is the five DLLs found here netcdf-4.1.1-win32 . The zip file have more files than just the five DLLs but only the DLLs are needed as far as I can tell. The DLLs must be accessible to your application at run time.
Somebody has written a set of DLLImports for us. Check this file dotNet-wrapper , particularly the file called "NetCDF.vb". It bears this text "Copyright 2004 University Corporation for Atmospheric Research/Unidata" and also this "This VB.NET wrapper created by Ed Hartnett, 3/10/4". Credits go to the author of course. With that in mind let us choose not to use the actual wrapper, as it is a bit old (in a computer perspective) now.
I will post (only) the most important DLLImports in F#-syntax shortly. The idea is to get this usage
1 2 3
open HDF5Write HDFSaveMatrixToFile @"c:\myhdffile.hdf" "A" <| (array2D [ [ 1.1; 1.2; 1.3]; [2.1; 2.2; 2.3] ])
There is a tool called "HDFView" found here HDFView . I have run the tool, and see the matrix "A" - or array if you like - showing up, so there is light at the end of the tunnel [:)] .
Let me know if it turns out workable for you.
Best regards
Robert
p.s. the above ftp links are
ftp://ftp.unidata.ucar.edu/pub/netcdf/contrib/win32/netcdf-4.1.1-win32-bin.zip and
ftp://ftp.unidata.ucar.edu/pub/netcdf/contrib/win32/netcdf_vb_net_wrapper.zip
Hello again
I tried using the technique myself at a computer at work. The computer at work is newer than my old one at home, so I noticed that using the 'platform target' "Any CPU" was no longer good enough. The netCDF DLL could not be loaded (into the executing "x64"-application). The netCDF DLL loads fine at home (into a "x86"-application). The 'platform target' can be changed from the Visual Studio project option build tab (to "x86" in this case, to make it work).
I guess I should not have been surprised, the netCDF DLLs were found in this file, after all:
netcdf-4.1.1-win32-bin.zip [;)].
The first library i mentioned, the HDF5 one, is more up to date and there are prebuilt Windows binaries for win32 and win64 alike.
I think maybe the plan is to hard code a method that can save a float[,]
-array using just the HDF5 binaries (hdf5dll.dll). I will let you know when I get a workable example (which is not necessarily this year).
Best regards and merry christmas to all,
Robert Nielsen
Hi
I have pasted some code to here: HDF5_185
There are a few caveats to the code - and a fair bunch of copy-paste errors, omissions and typos no doubt, but if you dare I think it might be manageable as is.
You need to download the HDF library DLLs and place them where it says in the code, or you may update the quoted paths in the code instead.
I will post some more information at a later time I hope; but don't really have the time this month. Questions are very welcome though (there is always that slight theoretical possibility that maybe my code does not all end up self-explanatory).
[;)]
Usage is e.g. like this:
1 2 3 4
open HDF5_185 printfn "HDF5 library version is %A" (LibraryVersion()) let matrixdata = Array2D.init 3 2 (fun i j -> (float i) + 0.1 * (float j)) SaveMatrixToHDFFile "MyFile.H5" "MyMatrix" matrixdata
Best regards
Robert
Nice - thanks!
Hi Adam and others
I am pleased if you find the script useful.
Unfortunately there was a serious error in my version 1.8.8 file. The calling conventions used in the newer versions of the 32 bit binary HDF5 libraries were changed (it is no longer StdCall). I have fixed this error in my import script. There is (most likely) a bunch of bugs left. Let us hope the remaining bugs are not as severe. The new version is uploaded as an fs and an fsi (signature) file to here:
HDF5-189.fsi
HDF5-189.fs
I added a function (GroupGetHierarchyInformation) to easier read the structure of a simple HDF5 file. Why this sudden interest for the structure of data in a time of F# 3.0 you ask? Well, I will let you figure that one out for yourselves :-) .
Best regards
Robert
Hi
I have posted a blog entry with some example files that invoke the "GroupGetHierarchyInformation"
function in an F# Type Provider context.
The blog entry is a Wordpress post.
Best regards
Robert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
module HDF5Write open System open System.Text open System.Runtime.InteropServices type double1d = System.Double[] type double2d = System.Double[,] type double3d = System.Double[,,] // type intbyref = byref<System.Int32> // is not allowed in the compiled code #nowarn "51" // no warnings for native pointer use (they are stand ins for byref) let hdf5const = 0x1000 let doubletypeid = 6 [< DllImport("netcdf.dll", EntryPoint="nc_create", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_create([< MarshalAs(UnmanagedType.LPStr) >] StringBuilder path, int cmode, [<Out>] int* ncidp) [< DllImport("netcdf.dll", EntryPoint="nc_def_dim", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_def_dim(int ncid, [< MarshalAs(UnmanagedType.LPStr) >] StringBuilder name, int len, [<Out>] int* idp) [< DllImport("netcdf.dll", EntryPoint="nc_def_var", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_def_var(int ncid, [< MarshalAs(UnmanagedType.LPStr) >] StringBuilder name, int nctype, int ndims, [<In>] int[] dimids, [<Out>] int* varid) [< DllImport("netcdf.dll", EntryPoint="nc_enddef", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_enddef(int ncid) [< DllImport("netcdf.dll", EntryPoint="nc_put_var_double", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_put_var_double1d(int ncid, int varid, [<In>] double1d data) [< DllImport("netcdf.dll", EntryPoint="nc_put_var_double", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_put_var_double2d(int ncid, int varid, [<In>] double2d data) [< DllImport("netcdf.dll", EntryPoint="nc_put_var_double", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_put_var_double3d(int ncid, int varid, [<In>] double3d data) [< DllImport("netcdf.dll", EntryPoint="nc_close", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true) >] extern int nc_close(int ncid) let checkerror (s: string) (result: int) = if result = 0 then () else failwith <| sprintf "Failed '%s' with errorcode %d." s result let HDFCreate (path: string) = let mutable id = 0 nc_create (new StringBuilder(path), hdf5const, &&id) |> checkerror "nc_create" id let HDFDefineDimension fileid (dimensionname: string) (dimensionlength: int) = let mutable id = 0 nc_def_dim(fileid, new StringBuilder(dimensionname), dimensionlength, &&id) |> checkerror "nc_def_dim" id let HDFDefineDataset fileid (datasetname: string) (dimensionIds: int list) = let mutable id = 0 let dimensions = List.toArray dimensionIds nc_def_var(fileid, new StringBuilder(datasetname), doubletypeid, dimensions.Length, dimensions, &&id) |> checkerror "nc_def_var" id let HDFEndDefinitions fileid = nc_enddef fileid |> checkerror "nc_enddef" let HDFWriteVector fileid datasetid data = nc_put_var_double1d (fileid, datasetid, data) |> checkerror "nc_put_var_double1d" let HDFWriteMatrix fileid datasetid data = nc_put_var_double2d (fileid, datasetid, data) |> checkerror "nc_put_var_double2d" let HDFWriteArray3d fileid datasetid data = nc_put_var_double3d (fileid, datasetid, data) |> checkerror "nc_put_var_double3d" let HDFClose fileid = nc_close fileid |> checkerror "nc_close" let HDFSaveMatrixToFile (filename: string) (matrixname: string) (data: double[,]) = let fileid = HDFCreate filename let xdimid = HDFDefineDimension fileid "x_dimension_non_data" (data.GetLength 0) let ydimid = HDFDefineDimension fileid "y_dimension_non_data" (data.GetLength 1) let dataid = HDFDefineDataset fileid matrixname [xdimid; ydimid] do HDFEndDefinitions fileid do HDFWriteMatrix fileid dataid data do HDFClose fileid
Thanks for this Robert! I'll try it out when I get the chance.
BTW, this isn't necessarily the right way, but this should create your CSV for for a simple array, assuing one entry per line:
1 2 3 4
[| 1; 2; 3 |] |> Seq.fold (fun a e -> a + e.ToString() + "\r\n") "" |> (fun txt -> System.IO.File.WriteAllText(@"c:\temp\out.txt", txt))
File:
1
2
3
BTW, this isn't necessarily the right way, but this should create your CSV for for a simple array, assuing one entry per line
Thanks!
But are there no libraries available? I guess I could read the spec on CSV and code by hand as you did. It does seem curious for computer programs to be communicating with each other via human-readable text files!
> But are there no libraries available?
I'm sure there are score of them - if you Google "C# csv writer" or something I'm sure there will be matches. As you can use C# and VB.net classes from F#, they should work - however, they may not handle F# primitive types correctly, etc.
> I guess I could read the spec on CSV and code by hand as you did.
There's a spec? :) AFAIK, a "comma seperated file" is just that - there aren't too many variations - header line or not, how quotations are handled, etc.
>It does seem curious for computer programs to be communicating with each other via human-readable text files!
Not really - many advantages for authoring/editing, debugging, cross-platform, etc., hence XML, JSON, etc.
There's a spec? :) AFAIK, a "comma seperated file" is just that - there aren't too many variations - header line or not, how quotations are handled, etc.
Well, reading the wikipedia article, there's not just one spec, but many. And sometimes it's not comma separated, but semi-colon separated. And numbers are represented as strings, but in an inconsistent way between countries/languages. And it can only cope with 2d data structures.
I will probably just convert to Mathematica's list notation, as that's direct, simpler, more consistent, more powerful, and the disadvantage of converting floats to strings and back is also present with CSV.
The books and libraries here should have what you are looking for. I don't work for the FFC, but can recommend F# for Technical Comuting & (and the older F# for Scientists on Amazon), and the F# for Visualization should do what you want w/o export to m'm'ica. (F# for numerics may also do other things you need.) I beleive import/export is covered somewhere in there.
F# for Technical Comuting & (and the older F# for Scientists on Amazon)
I have the older book; it was a very good book but doesn't contain anything useful on graphing or export. Maybe the newer one has relevant material?
F# for Visualization should do what you want w/o export to m'm'ica.
It must be quite hard to write a proper graphing library or there would be more around. If I saw enough to make me think you could do good 3D surface plots of various types, exportable as vector graphics with publishable quality, then I'd definitely look at buying it. It's not clear from their site whether it can do all this.
(F# for numerics may also do other things you need.)
Here standards are important, and unless this becomes the de-facto standard for technical computing in F#/.NET I will be wary. At the moment maybe Math.Net seems most likely to win? At any rate I hope a dominant mathematical library emerges soon.
Topic tags
- f# × 3705
- websharper × 1897
- compiler × 286
- functional × 201
- ui next × 139
- c# × 121
- classes × 97
- web × 97
- .net × 84
- book × 84
- async × 76
- ui.next × 67
- bug × 54
- core × 49
- website × 49
- server × 45
- parallel × 43
- ui × 43
- enhancement × 41
- parsing × 41
- testing × 41
- trywebsharper × 41
- typescript × 37
- html × 35
- javascript × 35
- owin × 35
- asynchronous × 30
- monad × 28
- ocaml × 28
- tutorial × 27
- warp × 27
- haskell × 26
- sitelet × 25
- linq × 22
- workflows × 22
- wpf × 20
- fpish × 19
- introduction × 19
- silverlight × 19
- sitelets × 19
- monodevelop × 17
- rpc × 17
- suave × 17
- piglets × 16
- collections × 15
- feature request × 15
- jquery × 15
- templates × 15
- getting started × 14
- pipeline × 14
- kendoui × 13
- reactive × 12
- 4.1.0.171 × 11
- monads × 11
- opinion × 10
- 4.0.190.100-rc × 9
- deployment × 9
- fixed × 9
- formlets × 9
- in × 9
- json × 9
- plugin × 9
- proposal × 9
- scheme × 9
- solid × 9
- basics × 8
- concurrent × 8
- highcharts × 8
- how-to × 8
- python × 8
- 4.1.1.175 × 7
- complexity × 7
- documentation × 7
- visual studio × 7
- 4.1.2.178 × 6
- lisp × 6
- real-world × 6
- released in 4.0.192.103-rc × 6
- remoting × 6
- resources × 6
- scala × 6
- websharper ui.next × 6
- workshop × 6
- xaml × 6
- 4.0.193.110 × 5
- 4.2.3.236 × 5
- aspnetmvc × 5
- authentication × 5
- azure × 5
- bootstrap × 5
- conference × 5
- dsl × 5
- formlet × 5
- java × 5
- list × 5
- metaprogramming × 5
- ml × 5
- released in Zafir.4.0.188.91-beta10 × 5
- sql × 5
- visualstudio × 5
- websharper.forms × 5
- zafir × 5
- 4.0.192.106 × 4
- 4.0.195.127 × 4
- 4.1.0.38 × 4
- 4.2.1.86 × 4
- 4.2.6.118 × 4
- css × 4
- example × 4
- extensions × 4
- fsi × 4
- fsx × 4
- html5 × 4
- jqueryui × 4
- lift × 4
- reflection × 4
- remote × 4
- rest × 4
- spa × 4
- teaching × 4
- template × 4
- websocket × 4
- wontfix × 4
- 4.0.196.147 × 3
- 4.1.0.34 × 3
- 4.1.6.207 × 3
- 4.2.1.223-beta × 3
- 4.2.11.258 × 3
- 4.2.4.114 × 3
- 4.2.4.247 × 3
- 4.2.5.115 × 3
- 4.2.6.253 × 3
- 4.2.9.256 × 3
- ajax × 3
- alt.net × 3
- aml × 3
- asp.net mvc × 3
- canvas × 3
- cloudsharper × 3
- compilation × 3
- database × 3
- erlang × 3
- events × 3
- extension × 3
- file upload × 3
- forums × 3
- inline × 3
- issue × 3
- kendo × 3
- macro × 3
- mono × 3
- msbuild × 3
- mvc × 3
- pattern × 3
- piglet × 3
- released in Zafir.4.0.187.90-beta10 × 3
- svg × 3
- type provider × 3
- view × 3
- 4.1.1.64 × 2
- 4.1.5.203 × 2
- 4.1.7.232 × 2
- 4.2.10.257 × 2
- 4.2.3.111 × 2
- 4.2.5.249 × 2
- android × 2
- asp.net × 2
- beginner × 2
- blog × 2
- chart × 2
- client × 2
- client server app × 2
- clojure × 2
- computation expressions × 2
- constructor × 2
- corporate × 2
- courses × 2
- cufp × 2
- d3 × 2
- debugging × 2
- direct × 2
- discriminated union × 2
- docs × 2
- elm × 2
- endpoint × 2
- endpoints × 2
- enterprise × 2
- entity framework × 2
- event × 2
- f# interactive × 2
- fable × 2
- flowlet × 2
- formdata × 2
- forms × 2
- fsc × 2
- google maps × 2
- hosting × 2
- http × 2
- https × 2
- iis 8.0 × 2
- install × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- jquery mobile × 2
- keynote × 2
- lens × 2
- lenses × 2
- linux × 2
- listmodel × 2
- mac × 2
- numeric × 2
- oauth × 2
- obfuscation × 2
- offline × 2
- oop × 2
- osx × 2
- packaging × 2
- pattern matching × 2
- performance × 2
- pipelines × 2
- q&a × 2
- quotation × 2
- reference × 2
- released in Zafir.4.0.185.88-beta10 × 2
- rx × 2
- script × 2
- security × 2
- self host × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- tutorials × 2
- type × 2
- url × 2
- var × 2
- websharper.charting × 2
- websharper4 × 2
- websockets × 2
- wig × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- 4.0.194.126 × 1
- 4.1.3.184 × 1
- 4.1.4.189 × 1
- 4.2.0.214-beta × 1
- 4.2.12.259 × 1
- 4.2.2.231-beta × 1
- 4.2.8.255 × 1
- Canvas Sample Example × 1
- DynamicStyle Animated Style × 1
- Fixed in 4.0.190.100-rc × 1
- Released in Zafir.UI.Next.4.0.169.79-beta10 × 1
- SvgDynamicAttribute × 1
- WebComponent × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- actor × 1
- addin × 1
- agents × 1
- aggregation × 1
- agile × 1
- alter session × 1
- animation × 1
- anonymous object × 1
- apache × 1
- api × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net core × 1
- asp.net integration × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- attributes × 1
- authorization × 1
- b-tree × 1
- back button × 1
- badimageformatexception × 1
- bash script × 1
- batching × 1
- binding-vars × 1
- bistro × 1
- body × 1
- bundle × 1
- camtasia studio × 1
- cas protocol × 1
- charts × 1
- clarity × 1
- class × 1
- cli × 1
- clipboard × 1
- clojurescript × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- color zones × 1
- combinator × 1
- combinators × 1
- compile × 1
- compile code on server × 1
- config × 1
- confirm × 1
- content × 1
- context × 1
- context.usersession × 1
- continuation-passing style × 1
- coords × 1
- cordova × 1
- cors × 1
- coursera × 1
- cross-domain × 1
- csla × 1
- current_schema × 1
- custom content × 1
- data × 1
- data grid × 1
- datetime × 1
- debug × 1
- declarative × 1
- delete × 1
- devexpress × 1
- dhtmlx × 1
- dictionary × 1
- directattribute × 1
- disqus × 1
- distance × 1
- do binding × 1
- doc elt ui.next upgrade × 1
- docker × 1
- dojo × 1
- dol × 1
- dom × 1
- domain × 1
- du × 1
- duf-101 × 1
- dynamic × 1
- eastern language × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- enums × 1
- error × 1
- etw × 1
- euclidean × 1
- eventhandlerlist × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- failed to translate × 1
- fake × 1
- fantomas × 1
- fear × 1
- float × 1
- form × 1
- form-data × 1
- forum × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- fsunit × 1
- function × 1
- functional style × 1
- game × 1
- games × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- getting-started × 1
- google × 1
- google.maps × 1
- grid × 1
- group × 1
- guide × 1
- hash × 1
- headers × 1
- hello world example × 1
- heroku × 1
- highchart × 1
- history × 1
- how to × 1
- html-templating × 1
- http405 × 1
- httpcontext × 1
- hubfs × 1
- i18n × 1
- ie 8 × 1
- if-doc × 1
- iis × 1
- image × 1
- images × 1
- inheritance × 1
- initialize × 1
- input × 1
- install "visual studio" × 1
- installer × 1
- int64 × 1
- interfaces × 1
- internet explorer × 1
- interop × 1
- interpreter × 1
- io × 1
- iobservable × 1
- ios × 1
- iot × 1
- ipad × 1
- isomorphic × 1
- javascript optimization × 1
- javascript semanticui resources × 1
- jquery-plugin × 1
- jquery-ui × 1
- jquery-ui-datepicker × 1
- js × 1
- kendo datasource × 1
- kendochart × 1
- kendoui compiler × 1
- knockout × 1
- l10n × 1
- learning × 1
- library × 1
- libs × 1
- license × 1
- licensing × 1
- lineserieszonescfg × 1
- local setting × 1
- localization × 1
- logging × 1
- loop × 1
- macros × 1
- mailboxprocessor × 1
- mapping × 1
- maps × 1
- markerclusterer × 1
- markup × 1
- marshal × 1
- math × 1
- mathjax × 1
- message × 1
- message passing × 1
- message-passing × 1
- meta × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- mix × 1
- mobile installation × 1
- mod_mono × 1
- modal × 1
- module × 1
- mouseevent × 1
- mouseposition × 1
- multidimensional × 1
- multiline × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- native × 1
- nested × 1
- nested loops × 1
- node × 1
- nunit × 1
- object relation mapper × 1
- object-oriented × 1
- om × 1
- onboarding × 1
- onclick × 1
- optimization × 1
- option × 1
- orm × 1
- os x × 1
- output-path × 1
- override × 1
- paper × 1
- parameter × 1
- persistence × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- post × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- privacy × 1
- private × 1
- profile × 1
- programming × 1
- project × 1
- project euler × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- proxy × 1
- ptvs × 1
- public × 1
- pure f# × 1
- purescript × 1
- qna × 1
- quant × 1
- query sitelet × 1
- question × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- reactjs × 1
- real-time × 1
- ref × 1
- region × 1
- released in 4.0.190.100-rc × 1
- reporting × 1
- responsive design × 1
- rest api × 1
- rest sitelet × 1
- restful × 1
- round table × 1
- router × 1
- routing × 1
- rpc reverseproxy × 1
- runtime × 1
- sales × 1
- sample × 1
- sampleapp × 1
- scriptcs × 1
- scripting × 1
- search × 1
- self hosted × 1
- semanticui × 1
- sequence × 1
- serialisation × 1
- service × 1
- session-state × 1
- sharepoint × 1
- signals × 1
- sitelet website × 1
- sitelet.protect × 1
- sitlets × 1
- slickgrid × 1
- source code × 1
- sqlentityconnection × 1
- ssl × 1
- standards × 1
- static content × 1
- stickynotes × 1
- streamreader × 1
- stress × 1
- strong name × 1
- structures × 1
- submitbutton × 1
- subscribe × 1
- svg example html5 websharper.ui.next × 1
- sweetalert × 1
- system.datetime × 1
- system.reflection.targetinvocationexception × 1
- table storage × 1
- targets × 1
- tdd × 1
- templates ui.next × 1
- templating × 1
- text parsing × 1
- three.js × 1
- time travel × 1
- tls × 1
- tooltip × 1
- tracing × 1
- tsunamiide × 1
- turkish × 1
- twitter-bootstrap × 1
- type erasure × 1
- type inference × 1
- type providers × 1
- type-providers × 1
- typeprovider × 1
- ui next forms × 1
- ui-next × 1
- ui.next jqueryui × 1
- ui.next charting × 1
- ui.next formlets × 1
- ui.next forms × 1
- ui.next suave visualstudio × 1
- ui.next templating × 1
- unicode × 1
- unittest client × 1
- upload × 1
- usersession × 1
- validation × 1
- vb × 1
- vb.net × 1
- vector × 1
- view.map × 1
- visal studio × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- vs2017 compiler zafir × 1
- vsix × 1
- web api × 1
- web-scraping × 1
- webapi × 1
- webcomponents × 1
- webforms × 1
- webgl × 1
- webrtc × 1
- webshaper × 1
- websharper async × 1
- websharper codemirror × 1
- websharper f# google × 1
- websharper forms × 1
- websharper reactive × 1
- websharper rpc × 1
- websharper sitelets routing × 1
- websharper warp × 1
- websharper-interface-generator × 1
- websharper.chartsjs × 1
- websharper.com × 1
- websharper.exe × 1
- websharper.owin × 1
- websharper.ui.next × 1
- websharper.ui.next jquery × 1
- websockets iis × 1
- why-websharper × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- www.grabbitmedia.com × 1
- xamarin × 1
- xml × 1
- yeoman × 1
- yield × 1
- zafir beta × 1
- zafir websharper4 × 1
- zarovizsga × 1
![]() |
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy |
Built with WebSharper |
Hi. Very simple question for you.
How do you get an array of double precision floats into a file?
I need the file to be one of the following formats (whichever is easiest):
"CSV", "TSV", "XLS", "HarwellBoeing", "MAT", "MTX", "DIF", "FITS", "HDF5", "MPS", "SDTS"
e.g. if you had a function:
export array:array2D filename:string
how would that function be defined?
Ideally it would be possible to export several arrays of different dimensions to the same file (1 or 2 1D float arrays corresponding to axes, one 1D or 2D float array for data, and a few strings for labels).
I'm used to scientific languages, and initially found F# very productive, but have been stuck for a long time at the point of plotting graphs, and really need to get some data into Mathematica to plot asap. I couldn't find a way to plot good 3D graphs from F#, or to control a Mathematica notebook from F#, so the data will have to go into Mathematica via files.
Thanks for any help!