# Numerical computing packages for Scala

Let's now look through linear algebra and numerical computing software that is available for Scala. A linear algebra software package would involve being able to perform operations on matrices and vectors, solving linear systems of equations, finding the determinant, and performing other operations associated with the discipline of linear algebra in the field of mathematics.

MATLAB started as a linear algebra package and evolved into a whole programming language and interactive computing environment. The NumPy library for Python can do most of the things expected from a linear algebra package and a lot more. In this section, we will provide an overview of what is available in Scala in this regard. We will examine the packages briefly, tell you where to get them, how actively they are developed, and very briefly discuss the main functionality available in them.

## Scalala

Scalala is a linear algebra package for Scala. It is currently not actively maintained, having been superseded by Breeze. It can be found at the following website:

https://github.com/scalala/Scalala

It is right now mostly of historic interest; however, Scalala has rich MATLAB-like operators on vectors and matrices and a library of numerical routines. It also has basic support for plotting.

## Breeze

Breeze is the biggest and best maintained numerical computing library for Scala. It can be found at the ScalaNLP website:

It is developed along with Epic and Puck, the former of which is a powerful statistical parser and the latter is a GPU-powered parser for natural languages. These two later libraries will be of less concern to us. Breeze, however, is a big part of this book. It provide functionality that is roughly equivalent to the famous and widely used NumPy package for Python. It is actively maintained and is likely to remain so in the near future.

Breeze is modeled on Scalala, which was mentioned previously. It supports all the matrix and vector operations you would expect. It provides a large number of probability distributions. It also provides routines for optimization and linear equation solving as well as routines for plotting. In a later chapter, we will introduce Breeze in detail and explain to readers how to do things they have grown accustomed to in other systems in Breeze.

## ScalaLab

ScalaLab is a numerical computing environment aiming to replicate the functionality of MATLAB. The website is given here:

https://code.google.com/p/scalalab/

ScalaLab will be discussed in a section dedicated to it. It supports Scala-based scripting and is written mostly in Java with some speed-critical sections written in C/C++. It allows you to access the results of MATLAB scripts. It can use dozens of Scala and Java libraries for scientific computing. There is a basic support for plotting: