假设我有和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”。
答案 0 :(得分:161)
重复遍历数组的转置:
for column in array.T:
some_function(column)
答案 1 :(得分:11)
这应该给你一个开始
>>> for col in range(arr.shape[1]):
some_function(arr[:,col])
[1 2 3 4]
[99 14 12 43]
[2 5 7 1]
答案 2 :(得分:4)
for c in np.hsplit(array, array.shape[1]):
some_fun(c)
答案 3 :(得分:3)
对于三维数组,您可以尝试:
for c in array.transpose(1, 0, 2):
do_stuff(c)
有关array.transpose
的工作方式,请参阅文档。基本上,您是在指定要移动的尺寸。在这种情况下,我们会将第二维(例如列)移到第一维。
答案 4 :(得分:1)
您还可以使用unzip遍历各列
for col in zip(*array):
some_function(col)
答案 5 :(得分:0)
例如,您想要找到矩阵中每一列的均值。让我们创建以下矩阵
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,:]
结果是: array([4.33333333,5.,5.66666667,4.])
答案 6 :(得分:0)
或者,您可以使用enumerate
。它也为您提供列号和列值。
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