1 | initial version |

You should understand that a matrix is not sparse or dense by itself. It depends on how you define it.

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
```

The difference about sparse matrices and dense matrices is about how it is stored in memory. Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index (i,j) to its entry.

Note that, given a matrix M, you can transform it into a dense matrix or a spase matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

2 | No.2 Revision |

You should understand that a matrix is not sparse or dense by itself. It depends on how you define it.

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
```

The difference about sparse matrices and dense matrices is about how it is stored in ~~memory. ~~memory (and therefore which algorithm are used).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index (i,j) to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about n non-zero entries compared to about n^2 zero entries).

In your case, n^2/2 non-zero entries is too much, so you should better define dense matrices.

Note that, given a matrix M, you can transform it into a dense matrix or a ~~spase ~~sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

3 | No.3 Revision |

You should understand that a matrix is not sparse or dense by itself. It depends on how you define it.

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are used).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index (i,j) to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about n non-zero entries compared to about n^2 zero entries).

In your case, n^2/2 non-zero entries is too much, so you should better define dense matrices.

Note that, given a matrix M, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

4 | No.4 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are used).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index (i,j) to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about n non-zero entries compared to about n^2 zero entries).

In your case, n^2/2 non-zero entries is too much, so you should better define dense matrices.

Note that, given a matrix M, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

5 | No.5 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are used).

In your case, n^2/2 non-zero entries is too ~~much, so ~~much for the sparse-matrix algorithms to work efficiently. Hence, you should better define dense matrices.

Note that, given a matrix M, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

6 | No.6 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index ~~(i,j) ~~$(i,j)$ to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about ~~n ~~$n$ non-zero entries compared to about ~~n^2 ~~$n^2$ zero entries).

In your case, ~~n^2/2 ~~$n^2/2$ non-zero entries is too much for the sparse-matrix algorithms to work efficiently. Hence, you should better define dense matrices.

Note that, given a matrix ~~M, ~~`M`

, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

7 | No.7 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are ~~used).~~used to handle them).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero elements are stored in a dictionary mapping an index $(i,j)$ to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about $n$ non-zero entries compared to about $n^2$ zero entries).

In your case, $n^2/2$ non-zero entries is too much for the sparse-matrix algorithms to work efficiently. Hence, you should better define dense matrices.

Note that, given a matrix `M`

, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

8 | No.8 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are used to handle them).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero ~~elements ~~entries are stored in a dictionary mapping an index $(i,j)$ to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about $n$ non-zero entries compared to about $n^2$ zero entries).

In your case, $n^2/2$ non-zero entries is too much for the sparse-matrix algorithms to work efficiently. Hence, you should better define dense matrices.

Note that, given a matrix `M`

, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

9 | No.9 Revision |

For example:

```
sage: M = matrix(ZZ,[[1,1,1],[1,1,1],[1,1,1]],sparse=True)
sage: M
[1 1 1]
[1 1 1]
[1 1 1]
sage: M.is_sparse()
True
sage: M.is_dense()
False
```

But

```
sage: sage: M = matrix(ZZ,3,sparse=False)
sage: M
[0 0 0]
[0 0 0]
[0 0 0]
sage: M.is_sparse()
False
sage: M.is_dense()
True
```

The difference about sparse matrices and dense matrices is about how it is stored in memory (and therefore which algorithm are used to handle them).

Basically, in a dense matrix, every entry are stored in memory, even if it is zero. In a sparse matrix, only the non-zero entries are stored in a dictionary mapping an index $(i,j)$ to its entry.

So, you should define a matrix as a sparse matrix only if the number of non-zero elements is very small compared to the total number of entries. This is typically useful if the non-zero entries are located along the diagonal (there are about $n$ non-zero entries compared to about $n^2$ zero ~~entries).~~entries). However, for very small matrices (e.g. 5x5), even with a lot of zero entries, defining dense matrices is usually faster.

In your case, $n^2/2$ non-zero entries is too much for the sparse-matrix algorithms to work efficiently. Hence, you should better define dense matrices.

Note that, given a matrix `M`

, you can transform it into a dense matrix or a sparse matrix with the methods `.dense_matrix()`

and `.sparse_matrix()`

. This can be usefull for example if, after a computation, a lot of entries become non-zero.

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.