csharpfftfsharpintegrationinterpolationlinear-algebramathdifferentiationmatrixnumericsrandomregressionstatisticsmathnet
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
14 KiB
223 lines
14 KiB
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Delimited Text Files (CSV & TSV)
|
|
</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<meta name="author" content="Christoph Ruegg, Marcus Cuda, Jurgen Van Gael">
|
|
|
|
<link rel="stylesheet" id="theme_link" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.6.0/materia/bootstrap.min.css">
|
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>
|
|
|
|
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"></script>
|
|
|
|
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
|
<link type="text/css" rel="stylesheet" href="https://numerics.mathdotnet.com/content/navbar-fixed-left.css" />
|
|
<link type="text/css" rel="stylesheet" href="https://numerics.mathdotnet.com/content/fsdocs-default.css" />
|
|
<link type="text/css" rel="stylesheet" href="https://numerics.mathdotnet.com/content/fsdocs-custom.css" />
|
|
<script type="text/javascript" src="https://numerics.mathdotnet.com/content/fsdocs-tips.js"></script>
|
|
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
|
|
<!--[if lt IE 9]>
|
|
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<!-- BEGIN SEARCH BOX: this adds support for the search box -->
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" />
|
|
<!-- END SEARCH BOX: this adds support for the search box -->
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<nav class="navbar navbar-expand-md navbar-light bg-secondary fixed-left" id="fsdocs-nav">
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse navbar-nav-scroll" id="navbarsExampleDefault">
|
|
<a href="https://numerics.mathdotnet.com/"><img id="fsdocs-logo" src="/logo.png" /></a>
|
|
<!-- BEGIN SEARCH BOX: this adds support for the search box -->
|
|
<div id="header">
|
|
<div class="searchbox" id="fsdocs-searchbox">
|
|
<label for="search-by">
|
|
<i class="fas fa-search"></i>
|
|
</label>
|
|
<input data-search-input="" id="search-by" type="search" placeholder="Search..." />
|
|
<span data-search-clear="">
|
|
<i class="fas fa-times"></i>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<!-- END SEARCH BOX: this adds support for the search box -->
|
|
<ul class="navbar-nav">
|
|
<li class="nav-header">Math.NET Numerics</li>
|
|
<li class="nav-item"><a class="nav-link" href="Packages.html">NuGet & Binaries</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="ReleaseNotes.html">Release Notes</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/blob/master/LICENSE.md">MIT License</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Compatibility.html">Platform Support</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="https://numerics.mathdotnet.com/api/">Class Reference</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/issues">Issues & Bugs</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Users.html">Who is using Math.NET?</a></li>
|
|
|
|
<li class="nav-header">Contributing</li>
|
|
<li class="nav-item"><a class="nav-link" href="Contributors.html">Contributors</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Contributing.html">Contributing</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Build.html">Build & Tools</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/discussions/categories/ideas">Your Ideas</a></li>
|
|
|
|
<li class="nav-header">Getting Help</li>
|
|
<li class="nav-item"><a class="nav-link" href="https://discuss.mathdotnet.com/c/numerics">Discuss</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="https://stackoverflow.com/questions/tagged/mathdotnet">Stack Overflow</a></li>
|
|
|
|
<li class="nav-header">Getting Started</li>
|
|
<l class="nav-item"i><a class="nav-link" href="/">Getting started</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Constants.html">Constants</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Matrix.html">Matrices and Vectors</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Euclid.html">Euclid & Number Theory</a></li>
|
|
<li class="nav-item">Combinatorics</li>
|
|
|
|
<li class="nav-header">Evaluation</li>
|
|
<li class="nav-item"><a class="nav-link" href="Functions.html">Special Functions</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Integration.html">Integration</a></li>
|
|
|
|
<li class="nav-header">Statistics/Probability</li>
|
|
<li class="nav-item"><a class="nav-link" href="DescriptiveStatistics.html">Descriptive Statistics</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Probability.html">Probability Distributions</a></li>
|
|
|
|
<li class="nav-header">Generation</li>
|
|
<li class="nav-item"><a class="nav-link" href="Generate.html">Generating Data</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="Random.html">Random Numbers</a></li>
|
|
|
|
<li class="nav-header">Solving Equations</li>
|
|
<li class="nav-item"><a class="nav-link" href="LinearEquations.html">Linear Equation Systems</a></li>
|
|
|
|
<li class="nav-header">Optimization</li>
|
|
<li class="nav-item"><a class="nav-link" href="Distance.html">Distance Metrics</a></li>
|
|
|
|
<li class="nav-header">Curve Fitting</li>
|
|
<li class="nav-item"><a class="nav-link" href="Regression.html">Regression</a></li>
|
|
|
|
<li class="nav-header">Native Providers</li>
|
|
<li class="nav-item"><a class="nav-link" href="MKL.html">Intel MKL</a></li>
|
|
|
|
<li class="nav-header">Working Together</li>
|
|
<li class="nav-item"><a class="nav-link" href="CSV.html">Delimited Text Files (CSV)</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="MatrixMarket.html">NIST MatrixMarket</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="MatlabFiles.html">MATLAB</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="IFSharpNotebook.html">IF# Notebook</a></li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
<div class="container">
|
|
<div class="masthead">
|
|
<h3 class="muted">
|
|
<a href="https://numerics.mathdotnet.com">Math.NET Numerics</a> |
|
|
<a href="https://www.mathdotnet.com">Math.NET Project</a> |
|
|
<a href="https://github.com/mathnet/mathnet-numerics">GitHub</a>
|
|
</h3>
|
|
</div>
|
|
<hr />
|
|
<div class="container" id="fsdocs-content">
|
|
<h1><a name="Delimited-Text-Files-CSV-amp-TSV" class="anchor" href="#Delimited-Text-Files-CSV-amp-TSV">Delimited Text Files (CSV & TSV)</a></h1>
|
|
<p>Likely the most common file format for tabular data, delimited files like CSV store data as text
|
|
with one line per row and values within rows separated by a comma.
|
|
Such text files are supported by virtually all software that deals with tabular data.</p>
|
|
<p>Example:</p>
|
|
<table class="pre"><tr><td class="snippet"><pre class="fssnip"><code lang="text">A,B,C
|
|
0.5,0.6,98.0
|
|
2.0,3.4,5.3
|
|
</code></pre></td></tr></table>
|
|
<p>Unfortunately there is no universal standard on what character is used as separator and how
|
|
individual values are formatted and escaped. CSV files traditionally use a comma as separator, but this
|
|
causes problems e.g. in Germany where the comma is used as decimal point in numbers. The tabulator
|
|
proves to be a useful alternative, usually denoted by using the TSV extension instead of CSV.
|
|
Other separators like semicolons or colons are common as well.</p>
|
|
<p>Math.NET Numerics provides basic support for delimited files with the <strong>MathNet.Numerics.Data.Text</strong> package,
|
|
which is available on NuGet as separate package and not included in the basic distribution.</p>
|
|
<h2><a name="Reading-a-matrix-from-a-delimited-file" class="anchor" href="#Reading-a-matrix-from-a-delimited-file">Reading a matrix from a delimited file</a></h2>
|
|
<p>The <code>DelimitedReader</code> class provides static functions to read a matrix from a file or string in delimited form.
|
|
It can read from:</p>
|
|
<ul>
|
|
<li>
|
|
<strong>TextReader</strong>: If you have your delimited data already in memory in a string,
|
|
you can use this method using a StringReader.
|
|
</li>
|
|
<li><strong>Stream</strong>: read directly from a stream, e.g. a MemoryStream, FileStream or NetworkStream.</li>
|
|
<li><strong>File Path (string)</strong>: read from a file, specified by the file system path.</li>
|
|
</ul>
|
|
<p>All these functions expect the data type of the matrix to be generated as generic type argument.
|
|
Only Double, Single, Complex and Complex32 are supported.</p>
|
|
<p>Example:</p>
|
|
<table class="pre"><tr><td class="snippet"><pre class="fssnip highlighted"><code lang="csharp"><span class="k">using</span> MathNet.Numerics.Data.Text;
|
|
|
|
Matrix<<span class="k">double</span>> matrix <span class="o">=</span> DelimitedReader.Read<<span class="k">double</span>>(<span class="s">"data.csv"</span>, <span class="k">false</span>, <span class="s">","</span>, <span class="k">true</span>);
|
|
</code></pre></td></tr></table>
|
|
<p>Unfortunately the lack of standard means that the parsing logic needs to be parametrized accordingly.
|
|
There are ways to automatically profile the provided file to find out the correct parameters automatically,
|
|
but for simplicity the Read functions expects those parameters explicitly as optional arguments:</p>
|
|
<ul>
|
|
<li>
|
|
<strong>sparse</strong>: Whether the the returned matrix should be constructed as sparse (true) or dense (false).<br />
|
|
Default: false.
|
|
</li>
|
|
<li>
|
|
<strong>delimiter</strong>: Number delimiter between numbers of the same line. Supports Regex groups.<br />
|
|
Default: <code>\s</code> (white space).
|
|
</li>
|
|
<li>
|
|
<strong>hasHeaders</strong>: Whether the first row contains column headers or not. If true, the first line will be skipped.<br />
|
|
Default: false.
|
|
</li>
|
|
<li>
|
|
<strong>formatProvider</strong>: The culture to use. It is often a good idea to use InvariantCulture,
|
|
to make the format independent from the local culture.
|
|
Default: null.
|
|
</li>
|
|
</ul>
|
|
<h2><a name="Writing-a-matrix-to-a-delimited-file" class="anchor" href="#Writing-a-matrix-to-a-delimited-file">Writing a matrix to a delimited file</a></h2>
|
|
<p>The dual to the reader above is the <code>DelimitedWriter</code> class that can serialize a matrix
|
|
to a delimited text file, stream or TextWriter.</p>
|
|
<p>The static Write functions accept the following optional arguments to control the output format:</p>
|
|
<ul>
|
|
<li>
|
|
<strong>delimiter</strong>: Number delimiter to write between numbers of the same line.<br />
|
|
Default: <code>\t</code> (tabulator).
|
|
</li>
|
|
<li>
|
|
<strong>columnHeaders</strong>: list of column header strings, or null if no headers should be written.<br />
|
|
Default: null.
|
|
</li>
|
|
<li>
|
|
<strong>format</strong>: The number format to use on each element, similar to what can be provided to Double.ToString().<br />
|
|
Default: null.
|
|
</li>
|
|
<li>
|
|
<strong>formatProvider</strong>: The culture to use. It is often a good idea to use InvariantCulture,
|
|
to make the format independent from the local culture.
|
|
Default: null.
|
|
</li>
|
|
</ul>
|
|
<p>Example:</p>
|
|
<table class="pre"><tr><td class="snippet"><pre class="fssnip highlighted"><code lang="csharp">DelimitedWriter.Write(<span class="s">"data.csv"</span>, matrix, <span class="s">","</span>);
|
|
</code></pre></td></tr></table>
|
|
<h2><a name="Alternatives" class="anchor" href="#Alternatives">Alternatives</a></h2>
|
|
<p>The data extension packages also offer other ways to serialize a matrix to a binary stream or file.
|
|
Among others:</p>
|
|
<ul>
|
|
<li><a href="MatrixMarket.html">NIST MatrixMarket text files</a></li>
|
|
<li><a href="MatlabFiles.html">MATLAB Level-5 Mat files</a></li>
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
<!-- BEGIN SEARCH BOX: this adds support for the search box -->
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" />
|
|
<script type="text/javascript">var fsdocs_search_baseurl = 'https://numerics.mathdotnet.com/';</script>
|
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.8/lunr.min.js"></script>
|
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.min.js"></script>
|
|
<script type="text/javascript" src="https://numerics.mathdotnet.com/content/fsdocs-search.js"></script>
|
|
<!-- END SEARCH BOX: this adds support for the search box -->
|
|
</div>
|
|
</body>
|
|
|
|
</html>
|
|
|