Posted
almost 14 years
ago
by
Math.NET Team
Two years ago, the people who developed Math.Net Iridium and dnAnalytics, both open source numerical libraries for .NET, came together with the idea of creating one great numerical library for .NET. Based on our combined experiences, we designed a
... [More]
new library and called it Math.Net Numerics.During the past two years, with financial support from Microsoft Research and together with some great new developers on the team, we are on the final leg of delivering Math.Net Numerics 1.0: the last release of Math.Net Numerics beta.The .NET platform is a good place for scientific computing. Modulo a few essential things we'd like to see in the future, e.g. integration with SIMD instructions, the .NET runtime allows us to write fairly efficient numerical code. Nonetheless, there are places where improvements should be possible and we'd like to invite you to help us out.Starting from today, we're running a contest on writing the most efficient matrix multiplication routine in .NET. We will incorporate the best code into Math.Net Numerics before we release v1.0 of the library. As a thanks you, the winner will receive a 1500$ prize! (The runner up will win 500$.) The contest rules and benchmark harness are up at http://gemm.codeplex.com/. We hope you enter our competition and share your insights on making the best .NET numerical code out there! [Less]
|
Posted
about 14 years
ago
by
Math.NET Team
I was recently reading a blog post by a fellow machine learner on how to efficiently compute a variance or standard deviation. Imagine we have 1GB worth of doubles for which we want to compute the standard deviation.
Since the standard deviation is
... [More]
defined as E[(X - E[X])2] we could compute the mean of our list of doubles, subtract it from each element in the list, and average the resulting list. The problem with this method is that not only is it numerically suboptimal to do so (recall, when the standard deviation is small, we are potentially subtracting the two very similar numbers X and E[X] = catastrophic cancellation), it is also inefficient as it requires two passes over our data.
In a little Math.Net Numerics program (get it here), I use the Statistics class to compute the standard deviation for an array of 100,000,000 doubles (that's about 800MB of data). The code is extremely simple, except for some IO code which you can find in the full source, you only need to write
var sdev = Statistics.StandardDeviation(ReadFile(sr));
Math.Net Numerics is guaranteed to only loop over your data once, as well as be numerically stable. When streaming the data from file, no extra memory is used beyond a handful of doubles for bookkeeping and the computation finishes in 57 seconds (that's streaming from my laptop's hard drive at around 13MB/sec). When reading the whole array into memory, the computation finishes in about 5 seconds (but ofcourse will consume almost 800MB of RAM).
Check out the rest of MathNet.Numerics.Statistics for methods to compute other statistics efficiently. Enjoy! -Jurgen [Less]
|
Posted
about 14 years
ago
by
Math.NET Team
As mentioned in the last post, we are having difficulty creating an ATLAS/LAPACK library for Windows. So we posted a $1000 bounty at FOSS Factory - http://www.fossfactory.org/project/p250 .
We also created a general Math.NET Numerics project for
... [More]
future bounties or user posted bounties - http://www.fossfactory.org/project/p252 . If you are wondering why the ATLAS bounty wasn't posted to this project, it is because the ATLAS script will usefully to people we'll beyond Math.NET Numerics. [Less]
|
Posted
about 14 years
ago
by
Marcus Cuda
We released Numerics Beta 1 about two months ago. Since then we’ve:
optimized the sparse vector and matrix performance
switched unit testing frameworks from MbUnit to NUnit. With NUnit we can now have a single test suite the covers both .NET and
... [More]
Silverlight.
added an example project that provides examples for all major classes in the library.
added an IsSymmetric and Modulus methods to the matrix interface.
reworked the iterative solver interface.
added a few other tweaks and optimization.
Two items are left for the Beta 2 release, adding the native interface and improved managed matrix multiplication. The initial native interface will just focus on linear algebra. We are half way done with the Intel Math Kernel Library (MKL) wrapper. We’ll then move on to the AMD Core Math Library (ACML) and then ATLAS/LAPACK. All three libraries share a similar interface, so once the MKL wrapper is compete the other two will be simple to add.
We have an outstanding issue with the ATLAS/LAPACK library. We are using Cygwin to build ATLAS. The threading library depends on the Cygwin runtime – which is released under the GPL. Users who use Numerics with a threaded version of ATLAS will be bound by the terms of the GPL even though Math.NET Numerics is released under the X11/MIT license. We are looking for ways to not include the Cygwin runtime library (other than only using a serial build of ATLAS). One way we are exploring is to use MinGW to build ATLAS. But so far we haven’t been successful. If anybody wants to give us a hand on finding a way around using the Cygwin runtime, let us know. [Less]
|
Posted
almost 15 years
ago
by
Math.NET Team
As we are ramping up to a version 1.0 release of Math.Net we are giving the website an overhaul. With more emphasis on documentation and samples we hope to get people started with Math.Net even faster!
|
Posted
almost 15 years
ago
by
Christoph Rüegg
Math.NET Numerics? Iridium? dnAnalytics? Yttrium? Huh? …sounds familiar?
It looks like some of you got lost in all the Math.NET subprojects and codenames. Math.NET evolved over time, with projects splitting into separate new projects, the
... [More]
introduction of codenames and new projects replacing older ones with a slightly different focus and approach. Unfortunately this lead to a mess (sorry for that!), so I’ve drawn the following small chart, visualizing the Math.NET Project history:
It all started with MathLib which was a very verbose object oriented computer algebra approach, including all kind of numeric routines to back the symbolics, including basic linear algebra. At the same time dnAnalytics was founded independently and unrelated to Math.NET, focusing entirely on numerics and statistics, leveraging highly optimized native libraries for better performance.
Soon it became obvious that it would make sense to refactor out the numerical aspects of MathLib to a separate project and to develop it independently, so Numerics was born, as well as several other non-numeric subprojects. Numerics became Iridium, and in 2009 Iridium and dnAnalytics finally decided to join forces and work together on the new Math.NET Numerics project, replacing both Iridium and dnAnalytics and entirely unrelated to the early Numerics 0.1-0.4 back in 2004.
Mostly thanks to Marcus and Jurgen, Math.NET Numerics is very well alive and active. Check out our source code repositories and forums. [Less]
|
Posted
almost 15 years
ago
Math.NET Numerics? Iridium? dnAnalytics? Yttrium? Huh? …sounds familiar?
It looks like some of you got lost in all the Math.NET subprojects and codenames. Math.NET evolved over time, with projects splitting into separate new projects, the
... [More]
introduction of codenames and new projects replacing older ones with a slightly different focus and approach. Unfortunately this lead to a mess (sorry for that!), so I’m trying to throw light on it by the following small chart, depicting the Math.NET Project history:
It all started with MathLib which was a very verbose object oriented computer algebra approach, including all kind of numeric routines to back the symbolics, including basic linear algebra. At the same time dnAnalytics was founded independently and unrelated to Math.NET, focusing entirely on numerics and statistics, leveraging highly optimized native libraries for better performance.
Soon it became obvious that it would make sense to refactor out the numerical aspects of MathLib to a separate project and to develop it independently, so Numerics was born, as well as several other non-numeric subprojects. Numerics became Iridium, and in 2009 Iridium and dnAnalytics finally decided to join forces and work together on the new Math.NET Numerics project, replacing both Iridium and dnAnalytics and entirely unrelated to the early Numerics 0.1-0.4 back in 2004.
Mostly thanks to Marcus and Jurgen, Math.NET Numerics is very well alive and active. Check out our source code repository and forums. [Less]
|
Posted
almost 15 years
ago
Math.NET Numerics? Iridium? dnAnalytics? Yttrium? Huh? …sounds familiar?
It looks like some of you got lost in all the Math.NET subprojects and codenames. Math.NET evolved over time, with projects splitting into separate new projects, the
... [More]
introduction of codenames and new projects replacing older ones with a slightly different focus and approach. Unfortunately this lead to a mess (sorry for that!), so I’m trying to throw light on it by the following small chart, depicting the Math.NET Project history:
It all started with MathLib which was a very verbose object oriented computer algebra approach, including all kind of numeric routines to back the symbolics, including basic linear algebra. At the same time dnAnalytics was founded independently and unrelated to Math.NET, focusing entirely on numerics and statistics, leveraging highly optimized native libraries for better performance.
Soon it became obvious that it would make sense to refactor out the numerical aspects of MathLib to a separate project and to develop it independently, so Numerics was born, as well as several other non-numeric subprojects. Numerics became Iridium, and in 2009 Iridium and dnAnalytics finally decided to join forces and work together on the new Math.NET Numerics project, replacing both Iridium and dnAnalytics and entirely unrelated to the early Numerics 0.1-0.4 back in 2004.
Mostly thanks to Marcus and Jurgen, Math.NET Numerics is very well alive and active. Check out our source code repository and forums. [Less]
|
Posted
almost 15 years
ago
Math.NET Numerics? Iridium? dnAnalytics? Yttrium? Huh? …sounds familiar?
It looks like some of you got lost in all the Math.NET subprojects and codenames. Math.NET evolved over time, with projects splitting into separate new projects, the
... [More]
introduction of codenames and new projects replacing older ones with a slightly different focus and approach. Unfortunately this lead to a mess (sorry for that!), so I’m trying to throw light on it by the following small chart, depicting the Math.NET Project history:
It all started with MathLib which was a very verbose object oriented computer algebra approach, including all kind of numeric routines to back the symbolics, including basic linear algebra. At the same time dnAnalytics was founded independently and unrelated to Math.NET, focusing entirely on numerics and statistics, leveraging highly optimized native libraries for better performance.
Soon it became obvious that it would make sense to refactor out the numerical aspects of MathLib to a separate project and to develop it independently, so Numerics was born, as well as several other non-numeric subprojects. Numerics became Iridium, and in 2009 Iridium and dnAnalytics finally decided to join forces and work together on the new Math.NET Numerics project, replacing both Iridium and dnAnalytics and entirely unrelated to the early Numerics 0.1-0.4 back in 2004.
Mostly thanks to Marcus and Jurgen, Math.NET Numerics is very well alive and active. Check out our source code repository and forums. [Less]
|
Posted
over 15 years
ago
You may have wondered why the Math.NET Iridium development has stopped abruptly almost two months ago. Luckily this is not entirely true, in the last few weeks the .Net numerics library has progressed well - but at a different place:
Math.NET
... [More]
Iridium is being merged with dnAnalytics, resulting in a new project named Math.NET Numerics
What does that mean for existing Math.NET Iridium users?
Higher development momentum and larger user community (as a direct result of merging two projects).
Better algorithm and code quality by picking the best of each project and simply by having new highly skilled developers on board.
New opensource license model: MIT/X11. This is a very open license similar to the so called New BSD License. This model is much less restricting than the previous LGPL and is (to my knowledge) source-compatible to a wide range of licenses including all GPL-based licenses and the Microsoft opensource licenses, too.
Some API changes. This is unavoidable since we try to integrate the best of both dnAnalytics and Iridium. At the same time this is a good chance to throw out some old designs that have shown to be improvable and replace them with better approaches. However, we try hard to keep migration as smooth as possible.
In addition to the completely self-contained managed implementation, we’ll profit from the dnAnalytics experience with parallelized and native optimizations (MKL, ACMS, CUDA etc) and will therefore provide optional wrappers around native libraries which provide significantly better performance when working with large data sets.
Again thanks to the dnAnalytics experience, you can expect better F# support, even though the library is still written in C#.
Although Iridium did support sparse linear algebra for a very short time, we had to remove it due to several issue. You can expect Math.NET Numerics to finally support sparse linear algebra in a clean way.
You’ll find the new Math.NET Numerics discussion board and tracker at
CodePlex and the current sources at
Github (subversion mirror at
google). The full portal website and wikis etc. will be available in a few weeks. Feel free to post your ideas, feedback or even fork the repository at github to contribute code to the project (note that we will completely reorganize the project structure until mid August).
We’ll let you know here and on Twitter as soon as we reach a first milestone and have an api preview ready.
(Migrated Comments)
Joannes Vermorel, August 3, 2009
Congratulations! Sparse linear algebra is really a nice move (I am sorry I had not been able to push it forward at the time).
Alexey Zakharov, October 23, 2009
Good news! C# really needs such library in stable version. [Less]
|