184

173

## Question

The Mathematica tutorial has a section 'Basic Matrix Operations', describing operations like transpose, inverse and determinant. These operations all work on entire matrices. I am missing a section on basic operations on matrix rows / columns.

For example:

- Extracting a row from a matrix
- Inserting a row into a matrix
- Adding two rows within a matrix together
- Swapping two rows
- Multiplying a row with a number

And similar for columns.

What is the most elegant way to implementation of these operations? Speed is not important for me, but simplicity is.

## Summary

Here I summarize my personal taste. I will update it whenever someone suggests a way I like more.

```
m = Range@12 ~Partition~ 3;
m // MatrixForm
```

$\begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix}$

Insert a column at position 2:

```
v = Range[21, 24];
Insert[m // Transpose, v, 2] // Transpose // MatrixForm
```

$\begin{pmatrix} 1 & 21 & 2 & 3 \\ 4 & 22 & 5 & 6 \\ 7 & 23 & 8 & 9 \\ 10 & 24& 11 & 12 \end{pmatrix}$

### Extract row / column

Extract row 2:

```
m[[2]]
```

$(4,5,6)$

Extract column 2

```
m[[All, 2]] // MatrixForm
```

$\begin{pmatrix}2\\5\\8\\11\end{pmatrix}$

### Insert a row / column

Insert a row at position 2:

```
v = Range[13, 15];
Insert[m, v, 2] // MatrixForm
```

$\begin{pmatrix} 1 & 2 & 3 \\ 13 & 14 & 15 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix}$

### Adding two rows / columns

column 3 = column 3 + column 1:

```
m2 = m;
m2[[All, 3]] += m2[[All, 1]];
m2 // MatrixForm
```

$\begin{pmatrix} 1 & 2 & 4 \\ 4 & 5 & 10 \\ 7 & 8 & 16 \\ 10 & 11 & 22 \end{pmatrix}$

row 2 = row 2 + row 3:

```
m2 = m;
m2[[2]] += m2[[3]];
m2 // MatrixForm
```

$\begin{pmatrix} 1 & 2 & 3 \\ 11 & 13 & 15 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix}$

### Swapping rows / columns

Swap row 1 and row 3:

```
m2 = m;
m2[[{1, 3}]] = m2[[{3, 1}]];
m2 // MatrixForm
```

$\begin{pmatrix} 7 & 8 & 9 \\ 4 & 5 & 6 \\ 1 & 2 & 3 \\ 10 & 11 & 12 \end{pmatrix}$

Swap column 1 and 3:

```
m2[[All, {1, 3}]] = m2[[All, {3, 1}]];
m2 // MatrixForm
```

$\begin{pmatrix} 3 & 2 & 1 \\ 6 & 5 & 4 \\ 9 & 8 & 7 \\ 12 & 11 & 10 \end{pmatrix}$

### Multiplying rows / columns

Multiply row 2 with 2:

```
m*{1, 2, 1, 1} // MatrixForm
```

$\begin{pmatrix} 1 & 2 & 3 \\ 8 & 10 & 12 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix}$

Multiply column 1 with 5:

```
((m // Transpose)*{5, 1, 1}) // Transpose // MatrixForm
```

$\begin{pmatrix} 5 & 2 & 3 \\ 20 & 5 & 6 \\ 35 & 8 & 9 \\ 50 & 11 & 12 \end{pmatrix}$

## References

- What is the most efficient way to add rows and columns to a matrix?
- Thanks to nikie for suggesting Matrix and Tensor Operations tutorial
- Chris Degnen pointed out https://stackoverflow.com/questions/7537401/how-to-insert-a-column-into-a-matrix-the-correct-mathematica-way

1How about deleting a row or column? – Hirek – 2015-02-28T19:00:49.223

2@Hirek, you'll want to look up

`Drop[]`

and`Delete[]`

. – J. M.'s ennui – 2015-06-18T09:35:25.880What about a partial column, say column one and first three rows, say using your example to get 1, 4, 7? I tried mat[[{1, 3}, 1]] // MatrixForm -> {1},{7}, but I want {1},{4},{7}? – sebastian c. – 2013-01-15T16:54:03.663

ok got it, need to Transpose, Flatten, Take as in: Take[Flatten[Transpose[mat]], {1, 3}] -> {1,4,7}, unless there are betters way to do so? – sebastian c. – 2013-01-15T17:16:52.663

4you don

`t need`

All`to get a row.`

m[[2]]`and`

m[[2,All]]`both give the second row of`

m`. – kglr – 2012-03-16T08:37:50.750