jeff_new - 1 year ago 163

Python Question

If I have a NumPy array, for example 5x3, is there a way to unpack it column by column all at once to pass to a function rather than like this:

`my_func(arr[:, 0], arr[:, 1], arr[:, 2])`

Kind of like

`*args`

Answer Source

You can unpack the transpose of the array in order to use the columns for your function arguments:

```
my_func(*arr.T)
```

Here's a simple example:

```
>>> x = np.arange(15).reshape(5, 3)
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
```

Let's write a function to add the columns together (normally done with `x.sum(axis=1)`

in NumPy):

```
def add_cols(a, b, c):
return a+b+c
```

Then we have:

```
>>> add_cols(*x.T)
array([15, 18, 21, 24, 27])
```

NumPy arrays will be unpacked along the first dimension, hence the need to transpose the array.