Jas*_*son 5 python casting numpy
我注意到在python中操作一些numpy数组之间x=x+a
和x+=a
操作之间的操作之间存在一些差异.
我试图做的只是将一些随机错误添加到整数列表,如下所示:
x=numpy.arange(12)
a=numpy.random.random(size=12)
x+=a
Run Code Online (Sandbox Code Playgroud)
但打印输出x
给出一个整数列表[0,1,2,3,4,5,6,7,8,9,10,11]
.
事实证明,如果我使用x=x+a
它,它会按预期工作.
这是我们应该注意的事情,我的意思是它表现得如此不同.我曾经认为它在x+=a
和之间是完全相同的,x=x+a
并且我一直在互相使用它们,而不是一直关注它们.现在,我对迄今为止所做的所有计算都非常关注和焦虑.谁知道这个问题何时何地发生,我必须仔细检查所有内容.
这是numpy中的一个错误吗?我已经在numpy版本1.2.0和1.6.1中进行了测试,他们都做到了这一点.
不,这不是一个错误,这是预期的行为.+=
进行就地添加,因此它不能更改数组的数据类型x
.当dtype是整数时,这意味着通过将a
截断的元素添加到整数而产生的浮点临时值.由于np.random.random
返回在范围内浮动[0, 1)
,因此结果总是被截断回到中的值x
.
相比之下,x + a
无论如何都需要分配一个新数组,并且当一个参数是浮点数而另一个参数是整数时,将新数组的dtype向上浮动.
避免此问题的最佳方法是明确arange
调用中所需的dtype :
x = np.arange(12, dtype=float)
x += np.random.random(size=12)
Run Code Online (Sandbox Code Playgroud)
(请注意,x += a
和x = x + a
很少在Python等效,因为后者通常修改对象指向x
例如用纯Python列表:
a = []
b = a
a += [1]
Run Code Online (Sandbox Code Playgroud)
也会改变b
,但a = a + [1]
不会b
触及.)
归档时间: |
|
查看次数: |
94 次 |
最近记录: |