2017-10-12 40 views
0

我遇到了一个问题,试图用新行替换numpy 2-d数组中的一行。在numpy数组中替换行时出错

我想写一个函数来取mm矩阵(n个m长度向量样本)并返回一个正交基集。对于第一步,我正在计算第一行的长度,然后除以该值(标准化第一行)。当我尝试归行分配回原来的矩阵,我打了一个错误:

import numpy.linalg as la 

def gauss_jordan(z): 
    print(z[0]) 
    print(la.norm(z[0])) 
    print(z[0]/la.norm(z[0]))) 
    print((z[0]/la.norm(z[0])).shape) 
    z[0, :] = z[0, :]/la.norm(z[0]) 

    print(z) 

结果:

[ 1 2 -2] 
3.0 
[ 0.33333333 0.66666667 -0.66666667] 
(3,) 
[[ 0 0 0] 
[-1 3 1] 
[-2 1 3] 
[ 1 -2 5]] 

哪里是零行是从哪里来的?计算的值都是正确的,但我无法弄清楚我的任务有什么问题。我也尝试过z[0,:] = z[0]/la.norm(z[0])

回答

0

它看起来像是它采取了圆形的划分,而不是正常的划分。 如果您尝试

z = z.astype('float64') 
z[0] /= la.norm(z[0]) 

而且会发生什么事,你使用的是什么版本numpy的和蟒蛇?是否有任何机会蟒蛇2.X?

+0

就是这样。它是python 2.7,但我认为我已经用'from __future__ import division'保护了这一点。我没有意识到这不会传播到广播业务。 – piovere

+0

我不认为numpy帐户那个 –

+0

四舍五入没有发生在部门,它发生在作业中。尝试做z [0 ,:] = [0.33333333,0.66666667,-0.66666667],你会看到同样的事情。当你试图将一个float放入一个int数组时,numpy将float转换为int而不是改变数组的类型。 – Acccumulation