Распаковать массив NumPy по столбцам

Если у меня есть массив NumPy, например 5x3, есть ли способ распаковать его столбец за столбцом сразу, чтобы перейти к функции, а не так:my_func(arr[:, 0], arr[:, 1], arr[:, 2])?

вроде как *args для распаковки списка, но по столбцу.

2 ответов


вы можете распаковать транспонирование массива, чтобы использовать столбцы для аргументов функции:

my_func(*arr.T)

вот простой пример:

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

давайте напишем функцию, чтобы добавить столбцы вместе (обычно делается с x.sum(axis=1) в NumPy):

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

затем у нас есть:

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

массивы NumPy будут распакованы вдоль первого измерения, следовательно, необходимо транспонировать массив.


и NumPy.сплит разбивает массив на несколько подмассивов. В твоем случае, indices_or_sections равно 3, так как у вас есть 3 столбца и axis = 1 так как мы разделяемся по столбцам.

my_func(numpy.split(array, 3, 1))