错误的结果是一个简单的ipython脚本

时间:2015-01-21 20:09:30

标签: python ipython ipython-notebook

我定义了一个简单的函数,它对3x3矩阵的第1行和第3行进行操作:

In [1]: from numpy import *    
     from sympy import Symbol

In [2]: def ifsin(mat): 
     mat[2,:]+=1
     mat[0,:]=mat[0,:]/pow(mat[2,:],mat[2,:]>0)
     return mat

In [3]:Ay=Symbol('Ay')
     By=Symbol('By')
     q=array([[Ay,-10 ,By],[0,0.4,1],[-1 ,-1, -1]])
     q

Out[3]:

 array([[Ay, -10, By],
        [0, 0.4, 1],
        [-1, -1, -1]], dtype=object)

In [4]:V=ifsin(q)
        q

Out[4]: array([[Ay, -10.0, By],
        [0, 0.4, 1],
        [0, 0, 0]], dtype=object)

为什么更新了矩阵q的第3行?

如果我评价以下内容:

In [5]:M=ifsin(V)
       q

Out[5]: array([[Ay, -10.0, By],
            [0, 0.4, 1],
            [1, 1, 1]], dtype=object)

q的第3行再次更新!!

我在ubuntu 14.04(python 2.7.6)上的“Computable”(ipad app)和ipython notebook上尝试了这个脚本,结果相同

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你真的要求在这一行上进行更新:

mat[2,:]+=1

在numpy语法中,这意味着"通过将每个值递增1和#34来更新名为mat的数组的第2行。