我似乎.sum()
在numpy
数组上使用时发现了一个陷阱,但是我找不到解释。本质上,如果我尝试对一个大数组求和,那么我会开始得到荒谬的答案,但这是
无声的, 而且我无法充分理解输出结果,而不是Google的原因。
例如,这完全按预期工作:
a = sum(xrange(2000))
print('a is {}'.format(a))
b = np.arange(2000).sum()
print('b is {}'.format(b))
为两者提供相同的输出:
a is 1999000
b is 1999000
但是,这不起作用:
c = sum(xrange(200000))
print('c is {}'.format(c))
d = np.arange(200000).sum()
print('d is {}'.format(d))
提供以下输出:
c is 19999900000
d is -1474936480
在更大的阵列上,有可能获得正面的结果。这是更隐蔽的,因为我可能根本不知道发生了什么不寻常的事情。例如:
e = sum(xrange(100000000))
print('e is {}'.format(e))
f = np.arange(100000000).sum()
print('f is {}'.format(f))
给出以下内容:
e is 4999999950000000
f is 887459712
我 猜想 这与数据类型有关,甚至使用python确实float
可以解决问题:
e = sum(xrange(100000000))
print('e is {}'.format(e))
f = np.arange(100000000, dtype=float).sum()
print('f is {}'.format(f))
给予:
e is 4999999950000000
f is 4.99999995e+15
我没有Comp的背景。科学 发现自己被卡住了(也许这是骗子)。我尝试过的事情:
numpy
数组具有固定的大小。不; 这似乎表明我应该打MemoryError
第一个。sum
行为的其他示例;没了( ? )我发现这个,但我看不出它如何应用。有人可以简要解释一下我所缺少的内容,然后告诉我我需要阅读哪些内容吗?另外,除了记得定义dtype
每次,还可以阻止这种情况发生或发出警告吗?
可能相关:
Windows 7的
numpy
1.11.3
在Python 2.7.9上用完了有思想的机盖
显然这是numpy的整数类型,溢出32位。通常,您可以使用以下命令将numpy配置为在这种情况下失败np.seterr
:
>>> import numpy as np
>>> np.seterr(over='raise')
{'divide': 'warn', 'invalid': 'warn', 'over': 'warn', 'under': 'ignore'}
>>> np.int8(127) + np.int8(2)
FloatingPointError: overflow encountered in byte_scalars
但是,sum
已明确记录了行为“ 溢出时不会引发错误 ”,因此您在这里可能不走运。为了方便起见,使用numpy通常是性能的折衷!
但是,您可以手动为累加器指定dtype,如下所示:
>>> a = np.ones(129)
>>> a.sum(dtype=np.int8) # will overflow
-127
>>> a.sum(dtype=np.int64) # no overflow
129
观看票号593,因为这是一个未解决的问题,它可能由numpy开发人员修复。
问题内容: 因此,当我在Java中使用Doubles进行加法或减法时,它会给我带来奇怪的结果。这里有一些: 如果我加上,它给了我。没错 如果我添加,它会给我(重复s 的数量可能会关闭)。错了 如果我减去,它就会给我(再次,重复的s可能会关闭)。错了 起初我以为这只是将双精度数与十进制值相加的问题,但我错了。以下工作正常: 现在,添加的第一个数字是保存为变量的双精度数,尽管第二个变量从捕获文本。例如
问题内容: 我了解由于数值误差(例如,以不同顺序对浮点求和),在数学上等效的算术运算如何导致不同的结果。 但是,令我惊讶的是,将零加到可以更改结果。我认为无论哪种情况,这对于浮动广告始终有效。 这是一个例子。我希望所有行都完全为零。有人可以解释为什么会这样吗? 和的较小值似乎不会发生Z。 我也确定。 这是另一个示例,它还演示了python的内置行为符合预期: 我正在使用numpy V1.9.2。
问题内容: 试图在LINQ查询(使用Entityframework)中实现条件创建了奇怪的查询。在某些情况下,即使阈值设置为180秒,这些查询也会超时: 使用一些不太优雅的if语句,我没有任何问题,查询在几秒钟内返回: 条件语句都是从查询字符串传递的,这就是为什么它们有时可能带有值而有时却没有值的原因。 使用三元运算符时会出现相同的问题 关于这些内联条件为何表现如此差的情况,是否有合理的解释? 问
问题内容: 有没有人看到像这样的方法签名后放置的数组? 版画 过去,“ C”兼容性是一种奇怪的表示法,但我也无法想象有人用C编写这种代码。 有谁知道为什么甚至允许这样做? 如果有问题,我正在使用Java 7 update 10。 这与Java 6中的功能相同。http://ideone.com/91rZV1 顺便说一句,这不会编译,我也不希望它编译 问题答案: 有谁知道为什么甚至允许这样做? 在这
我正在使用Weka Gui-Explorer,我想根据类{男性,女性}对我的数据进行分类。我使用MultiBoostAB分类器,以REPTree分类器为基础。我正在尝试使用训练集(557个实例)评估我的分类器的准确性 然后是一个具有大约300个属性的测试集(200个实例)。准确率83,5% - 167从200个实例中正确分类,kappa统计量为0,67。我保存了这个模型,并用它来预测 其他未知数据
当试图从Hitbox API获取数据时,我得到了一个奇怪的结果。对于一个API的命令,这种情况每次都会发生,而对于另一个API的命令,这种情况只是有时发生。结果差不多是这样(这是我得到的最后一个结果): \U001F\B\0\0\0\0\0\U0003W8SμMU~S N T&N G6C$Z%9IGF[(\U0005\U000F(:6\U000F\B P C\U0015\N\U007F V\U00