# Numpy how to iterate over columns of array?

Each Answer to this Q is separated by one/two green lines.

Suppose I have and m x n array. I want to pass each column of this array to a function to perform some operation on the entire column. How do I iterate over the columns of the array?

For example, I have a 4 x 3 array like

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

for column in array:
some_function(column)
``````

where column would be “1,2,3,4” in the first iteration, “99,14,12,43” in the second, and “2,5,7,1” in the third.

Just iterate over the transposed of your array:

``````for column in array.T:
some_function(column)
``````

This should give you a start

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

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

You can also use unzip to iterate through the columns

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

For a three dimensional array you could try:

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

See the docs on how `array.transpose` works. Basically you are specifying which dimension to shift. In this case we are shifting the second dimension (e.g. columns) to the first dimension.

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

For example you want to find a mean of each column in matrix. Let’s create the following matrix

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

The function for mean is

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

To do what is needed and store result in colon vector ‘results’

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

results = mat2[1,:]
``````

The results are:
array([4.33333333, 5. , 5.66666667, 4. ])

The question is old but for anyone looking nowadays.

You can iterate through the rows of a numpy array like this:

``````for row in array:
some_function(row) # do something here
``````

So to iterate through the columns of a 2D array you can simply transpose it like this:

``````transposed_array = array.T

#Now you can iterate through the columns like this:
for column in transposed_array:
some_function(column) # do something here
``````

If you want to collect the results of each column into a list for example, you can use list comprehension.

``````[some_function(column) for column in array.T]
``````

So in summary you can perform a function on each column of an array and collect the results into a list using this line of code:

``````result_list = [some_function(column) for column in array.T]
``````

Alternatively, you can use `enumerate`. It gives you the column number and the column values as well.

``````for num, column in enumerate(array.T):
some_function(column) # column: Gives you the column value as asked in the question
some_function(num) # num: Gives you the column number

``````

list -> array -> matrix -> matrix.T

``````import numpy as np

list = [1, 99, 2, 2, 14, 5, 3, 12, 7, 4, 43, 1]
arr_n = np.array(list) # list -> array
print(arr_n)
matrix = arr_n.reshape(4, 3) # array -> matrix(4*3?
print(matrix)
print(matrix.T) # matrix -> matrix.T

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

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

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

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .