尝试在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(这是我想要的)。
我无法找出解决办法!我如何使它与原始数字分开?
如果你想x
固定为全循环,只需将其值设置你进入循环之前:
x = a[0][0]
for i in a[0]:
a[0][n] = a[0][n]/x
print a[0][n]
n = n + 1
哇谢谢...即时通讯这样的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. ]])
有一些细微之处的位置:
- 我使用花车,而不是整数使用Python 2
- 时避免用整数除法的惊喜,你必须使用
a[:,0:1]
代替a[:,0]
选择第一列 - 由于就地操作员因某种原因对阵列广播进行了不同处理,因此无法编写
a /= a[:,0:1]
+1使用numpy。这是解决这个问题的正确方法。 – 2011-04-24 11:42:28
如果你正在做大量的数值计算,你可能想看看numpy和scipy.linalg模块 – ianalis 2011-04-24 05:34:54