Ответ 1
Просто перебирайте транспонированный массив:
for column in array.T:
some_function(column)
Предположим, что у меня есть и массив 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" в третьем.
Просто перебирайте транспонированный массив:
for column in array.T:
some_function(column)
Это должно дать вам начало
>>> for col in range(arr.shape[1]):
some_function(arr[:,col])
[1 2 3 4]
[99 14 12 43]
[2 5 7 1]
for c in np.hsplit(array, array.shape[1]):
some_fun(c)
Для трехмерного массива вы можете попробовать:
for c in array.transpose(1, 0, 2):
do_stuff(c)
Посмотрите документы о том, как работает array.transpose
. По сути, вы указываете, какое измерение нужно сместить. В этом случае мы перемещаем второе измерение (например, столбцы) в первое измерение.
Например, вы хотите найти среднее значение каждого столбца в матрице. Давайте создадим следующую матрицу
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.])
Вы также можете использовать unzip для перебора столбцов
for col in zip(*array):
some_function(col)