Numpy如何迭代数组列?

Use*_*ser 93 python loops numpy

假设我有和mxn数组.我想将此数组的每一列传递给一个函数,以对整个列执行某些操作.如何迭代数组的列?

例如,我有一个4 x 3阵列

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

for column in array:
  some_function(column)
Run Code Online (Sandbox Code Playgroud)

其中列在第一次迭代中为"1,2,3,4",第二次为"99,14,12,43",第三次为"2,5,7,1".

til*_*ten 194

只需遍历数组的转置:

for column in array.T:
   some_function(column)
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想知道的人来说,`array.T`并不昂贵,因为它只是改变了`array`的'strides'(参见[this answer](http://stackoverflow.com/a/19479436/420867)讨论) (37认同)
  • 有没有一种迭代方法可以将向量保持为列向量? (6认同)
  • 将结果合并回单个数组的好方法是什么? (5认同)

Abh*_*jit 13

这应该给你一个开始

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


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]
Run Code Online (Sandbox Code Playgroud)

  • 对我来说它看起来并不像是pythonic. (6认同)

小智 6

对于三维数组,您可以尝试:

for c in array.transpose(1, 0, 2):
    do_stuff(c)
Run Code Online (Sandbox Code Playgroud)

请参阅有关如何array.transpose工作的文档。基本上,您是在指定要移动的维度。在这种情况下,我们将第二维(例如列)转移到第一维。


小智 5

for c in np.hsplit(array, array.shape[1]):
    some_fun(c)
Run Code Online (Sandbox Code Playgroud)


小智 5

您还可以使用 unzip 来遍历列

for col in zip(*array):
   some_function(col)
Run Code Online (Sandbox Code Playgroud)