2011-04-24 33 views
0

我正在嘗試創建一個程序,用於減少任何給定的矩陣以減少行梯形式。嘗試在while循環中調用二維數組中的元素(python/numpy)

我想要的是將行中的每個條目除以前導數字。例如,說我有:

[ [3, 4, 5], [ 1, 2, 3] ] # a 2-d array. which gives: 

[ 3, 4, 5] 
[ 1, 2, 3] 

我試圖把它變成[1,4/3,5/3]。但是,如果你按照我的代碼:

def npgauss(a): 
    n = 0 

    for i in a[0]: 
     x = a[0][0] 
     a[0][n] = a[0][n]/x 
     print a[0][n] 
     n = n + 1 

你會看到,我的問題是,第一個項目獲取自身劃分給1,然後當它進入第二個條目,分兩路由新號碼1,而不是原來的號碼3(這是我想要的)。

我無法找出解決辦法!我如何使它與原始數字分開?

+0

如果你正在做大量的數值計算,你可能想看看numpy和scipy.linalg模塊 – ianalis 2011-04-24 05:34:54

回答

0

如果你想x固定爲全循環,只需將其值設置你進入循環之前:

x = a[0][0] 
for i in a[0]: 
    a[0][n] = a[0][n]/x 
    print a[0][n] 
    n = n + 1 
+0

哇謝謝...即時通訊這樣的noob ... – user722224 2011-04-24 04:24:16

0

你可以做到這一點使用list comprehensions

a = [[3, 4, 5], [1, 2, 3]] 

b = [[float(i)/row[0] for i in row] for row in a] 
3

由於問題提到numpy的,這裏是不使用循環的解決方案:

import numpy 
a = numpy.array([[3.,4.,5.],[1.,2.,3.]]) 
a = a/a[:,0:1] 
print a 

g艾夫斯所需的結果

array([[ 1.  , 1.33333333, 1.66666667], 
     [ 1.  , 2.  , 3.  ]]) 

有一些細微之處的位置:

  1. 我使用花車,而不是整數使用Python 2
  2. 時避免用整數除法的驚喜,你必須使用a[:,0:1]代替a[:,0]選擇第一列
  3. 由於就地操作員因某種原因對陣列廣播進行了不同處理,因此無法編寫a /= a[:,0:1]
+0

+1使用numpy。這是解決這個問題的正確方法。 – 2011-04-24 11:42:28