Qia*_*ian 7 python arrays numpy
所以,我创建了一个垂直的numpy数组,使用了/ =运算符,输出似乎不正确.基本上,如果x是向量,则为标量.我希望x/= s的每个条目x除以s.但是,我无法理解输出.运算符仅适用于x中的部分条目,我不确定如何选择它们.
In [8]: np.__version__
Out[8]: '1.10.4'
In [9]: x = np.random.rand(5,1)
In [10]: x
Out[10]:
array([[ 0.47577008],
[ 0.66127875],
[ 0.49337183],
[ 0.47195985],
[ 0.82384023]]) ####
In [11]: x /= x[2]
In [12]: x
Out[12]:
array([[ 0.96432356],
[ 1.3403253 ],
[ 1. ],
[ 0.95660073],
[ 0.82384023]]) #### this entry is not changed.
Run Code Online (Sandbox Code Playgroud)
在评估过程中,x [2]的值变为1.你需要制作一个值的副本,然后将每个元素除以它,或者将它分配给另一个变量或使用副本即
from copy import copy
x /= copy(x[2])
Run Code Online (Sandbox Code Playgroud)
要了解我们为什么需要这样做,让我们深入了解正在发生的事情.
In [9]: x = np.random.rand(5,1)
Run Code Online (Sandbox Code Playgroud)
这里我们将x定义为一个数组,但是不清楚这个数组中的每个元素在技术上也是一个数组.这是一个重要的区别,因为我们不是处理定义的值而是处理numpy数组对象,所以在下一行:
In [11]: x /= x[2]
Run Code Online (Sandbox Code Playgroud)
我们最终基本上"查找"x [2]中的值,该值返回一个具有一个值的数组,但因为我们每次都可以更改时查找它.
一个更清洁的解决方案是将数组展平为1d,因此x [2]现在等于0.49337183而不是数组([0.49337183])
所以在我们做之前x /= x[2]我们可以打电话x = x.flatten()
或者更好,但从一开始就保持1d x = np.random.rand(5)
至于x [3]的变化和x [4]没有的原因,我能给出的唯一真正有用的答案是分裂不是按顺序发生的,复杂的缓冲时间很长的wimey东西.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |