使用Numpy数组进行真正除法的问题

Rob*_*ith 3 python arrays numpy division

假设你有这个数组:

In [29]: a = array([[10, 20, 30, 40, 50], [14, 28, 42, 56, 70], [18, 36, 54, 72, 90]])

Out[30]: a
array([[ 0,  0,  0,  0,  0],
       [14, 28, 42, 56, 70],
       [18, 36, 54, 72, 90]])
Run Code Online (Sandbox Code Playgroud)

现在将第三行除以第一行(使用来自未来的导入部门)

In [32]: a[0]/a[2]
Out[32]: array([ 0.55555556,  0.55555556,  0.55555556,  0.55555556,  0.55555556])
Run Code Online (Sandbox Code Playgroud)

现在对循环中的每一行执行相同的操作:

In [33]: for i in range(3):
            print a[i]/a[2]   
[ 0.55555556  0.55555556  0.55555556  0.55555556  0.55555556]
[ 0.77777778  0.77777778  0.77777778  0.77777778  0.77777778]
[ 1.  1.  1.  1.  1.]
Run Code Online (Sandbox Code Playgroud)

一切看起来都合适.但现在,将第一个数组a [i]/a [2]分配给[i]:

In [35]: for i in range(3):
            a[i]/=a[2]
   ....:     

In [36]: a
Out[36]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

好吧,没问题.事实证明这是设计的.相反,我们应该这样做:

In [38]: for i in range(3):
            a[i] = a[i]/a[2]
   ....:     

In [39]: a
Out[39]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

但这不起作用.为什么以及如何解决它?

提前致谢.

nne*_*neo 6

您可以float先将整个数组转换为数组:

a = a.astype('float')
a /= a[2]
Run Code Online (Sandbox Code Playgroud)