尝试在while循环中调用二维数组中的元素(python/numpy)

问题描述:

我正在尝试创建一个程序,用于减少任何给定的矩阵以减少行梯形式。尝试在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

如果你想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

你可以做到这一点使用list comprehensions

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

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

由于问题提到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