2011-04-01 60 views
25

在Python中,如果定义:如何迭代矩阵的列?

a = arange(9).reshape(3,3) 

为3x3矩阵和迭代:

for i in a: 

它会遍历矩阵的行。有什么办法来迭代列?

+1

你为什么想遍历列(或行)?你的总体目标是什么?也许更直截了当的手段存在。谢谢 – eat 2011-04-01 15:21:23

+1

简单的线性代数转换例如 – 2011-04-07 07:59:18

+0

小心地举个例子吗?为什么这些转换不能直接用矩阵完成?谢谢 – eat 2011-04-07 08:33:02

回答

39

如何

for i in a.transpose(): 

,或者更短:

for i in a.T: 

这可能看起来很贵,但实际上是非常便宜的(它返回一个视图到相同的数据,但形状和步幅属性置换)。

+4

或者'如果你真的想玩高尔夫球场代码,那么我可以在a.T'上。 – 2011-04-01 15:06:19

0

假设a是一个很好形成矩阵,你可以尝试这样的:

b = zip(*a) 
for index in b: 
    ... 
+2

如果a很大,与'a.T'相比,使用'zip'非常昂贵。例如,如果'a'是100x100,那么压缩比采用转置要慢5000倍。对于3x3的情况,它仍然慢10倍。使用numpy内置插件通常是一个不错的主意,而不是像Python列表那样处理ndarrays。 – JoshAdel 2011-04-01 15:18:10