[英]Numpy how to iterate over columns of array?
假设我有和 mxn 数组。 我想将此数组的每一列传递给 function 以对整个列执行一些操作。 如何迭代数组的列?
例如,我有一个 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 array.transpose(1, 0, 2):
do_stuff(c)
请参阅有关array.transpose
如何工作的文档。 基本上,您是在指定要移动的维度。 在这种情况下,我们将第二维(例如列)转移到第一维。
for c in np.hsplit(array, array.shape[1]):
some_fun(c)
您还可以使用 unzip 来遍历列
for col in zip(*array):
some_function(col)
例如,您想找到矩阵中每一列的平均值。 让我们创建以下矩阵
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. ])
这个问题很老,但对于现在看的人来说。
您可以像这样遍历 numpy 数组的行:
for row in array:
some_function(row) # do something here
因此,要遍历 2D 数组的列,您可以像这样简单地转置它:
transposed_array = array.T
#Now you can iterate through the columns like this:
for column in transposed_array:
some_function(column) # do something here
例如,如果要将每一列的结果收集到列表中,则可以使用列表理解。
[some_function(column) for column in array.T]
因此,总而言之,您可以对数组的每一列执行一个函数,并使用以下代码行将结果收集到列表中:
result_list = [some_function(column) for column in array.T]
或者,您可以使用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
列表 -> 数组 -> 矩阵 -> 矩阵.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]]
NumPy arrays 有这样的内置方法。
print(list(T.mean(axis=0)))
# [2.5, 42.0, 3.75]
在二维 arrays 中,轴 0 是列尺寸。
抱歉,我回答这个问题已经晚了 10 年 4 个月。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.