我正在尝试创建一个程序,将任何给定的矩阵减少到减少的行梯队形式。
我想要的是将行中的每个条目除以前导数字。例如,说我有:
[ [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 :(得分: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. ]])
这里有一些细微之处:
a[:,0:1]
代替a[:,0]
来选择第一列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]