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

时间:2011-04-24 04:15:08

标签: python matrix 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(这是我想要的是)。

我无法想办法解决这个问题!如何使其除以原始数字?

3 个答案:

答案 0 :(得分:3)

由于问题提到numpy,这里是一个不使用循环的解决方案:

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

给出了所需的结果

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

这里有一些细微之处:

  1. 我使用浮点数而不是整数来避免使用Python 2时出现整数除法的意外。
  2. 您必须使用a[:,0:1]代替a[:,0]来选择第一列
  3. 您不能写a /= a[:,0:1],因为就地运营商出于某种原因对阵列广播的处理方式不同

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用list comprehensions

执行此操作
a = [[3, 4, 5], [1, 2, 3]]

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