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
for list unpacking but by column.
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
for list unpacking but by column.
numpy.split splits an array into multiple sub-arrays. In your case, indices_or_sections
is 3 since you have 3 columns, and axis = 1
since we're splitting by column.
my_func(numpy.split(array, 3, 1))
I guess numpy.split
will not suffice in the future. Instead, it should be
my_func(tuple(numpy.split(array, 3, 1)))
Currently, python prints the following warning:
FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use
arr[tuple(seq)]
instead ofarr[seq]
. In the future this will be interpreted as an array index,arr[np.array(seq)]
, which will result either in an error or a different result.
You can unpack the transpose of the array in order to use the columns for your function arguments:
Here's a simple example:
Let's write a function to add the columns together (normally done with
x.sum(axis=1)
in NumPy):Then we have:
NumPy arrays will be unpacked along the first dimension, hence the need to transpose the array.