Подтвердить что ты не робот

Нравится, как перебирать столбцы массива?

Предположим, что у меня есть и массив m x n. Я хочу передать каждый столбец этого массива функции для выполнения некоторой операции над всем столбцом. Как выполнить итерацию по столбцам массива?

Например, у меня есть массив размером 4 x 3, например

1  99 2
2  14 5
3  12 7
4  43 1

for column in array:
  some_function(column)

где столбец будет "1,2,3,4" на первой итерации, "99,14,12,43" во втором и "2,5,7,1" в третьем.

4b9b3361

Ответ 1

Просто перебирайте транспонированный массив:

for column in array.T:
   some_function(column)

Ответ 2

Это должно дать вам начало

>>> for col in range(arr.shape[1]):
    some_function(arr[:,col])


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]

Ответ 3

for c in np.hsplit(array, array.shape[1]):
    some_fun(c)

Ответ 4

Для трехмерного массива вы можете попробовать:

for c in array.transpose(1, 0, 2):
    do_stuff(c)

Посмотрите документы о том, как работает array.transpose. По сути, вы указываете, какое измерение нужно сместить. В этом случае мы перемещаем второе измерение (например, столбцы) в первое измерение.

Ответ 5

Например, вы хотите найти среднее значение каждого столбца в матрице. Давайте создадим следующую матрицу

mat2 = np.array([1,5,6,7,3,0,3,5,9,10,8,0], dtype=np.float64).reshape(3, 4)

Функция для среднего

def my_mean(x):
    return sum(x)/len(x)

Чтобы сделать то, что нужно, и сохранить результат в векторе двоеточия "результаты"

results = np.zeros(4)
for i in range(0, 4):
    mat2[:, i] = my_mean(mat2[:, i])

results = mat2[1,:]      

Результаты: массив ([4.33333333, 5., 5.66666667, 4.])

Ответ 6

Вы также можете использовать unzip для перебора столбцов

for col in zip(*array):
   some_function(col)