2011-04-01 77 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