相当于`数学.余数`在努比?

2024-04-24 05:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

NumPy中的^{}函数等价于什么?基本上我想为NumPy数组计算y = x - np.around(x)。(重要的是y的所有元素的绝对值最多为1/2)。查看NumPy文档^{}^{}都不能完成这项工作。你知道吗

显然,我考虑过写x - np.around(x),但我担心x的大值减法会产生浮点错误。例如:

import numpy as np

a = np.arange(1000) * 1e-9
x = a / 1e-9
y = x - np.around(x)

应该生成一个全零向量y,但实际上会有一些错误(如果我将数组的大小从1000增加到10000,错误会变得更大)。你知道吗

我问这个问题的原因是为了弄清楚是否有一个NumPy函数可以直接调用C数学库remainder(正如math.remainder必须做的那样),从而最小化浮点错误。你知道吗


Tags: 函数文档importnumpy元素as错误np
1条回答
网友
1楼 · 发布于 2024-04-24 05:35:29

我认为这种情况目前并不存在。也就是说,automagic^{}调用对我来说是正确的,例如:

import math
import numpy as np

ieee_remainder = np.vectorize(math.remainder)

ieee_remainder(np.arange(5), 5)

这会很好地通过参数进行广播,给出:

array([ 0.,  1.,  2., -2., -1.])

这可能是你想要的。你知道吗

性能大约是使用本机实现时的10倍。给定10000个元素的阵列,我的笔记本电脑大约需要以下时间:

  • 1200µs用于ieee_remainder
  • 150微秒是我拼凑的Cython版本
  • 120µs对于执行简单循环的C程序
  • 80µs用于numpy.fmod

考虑到glibc's ^{} implementation的复杂性,我很惊讶它的速度如此之快。你知道吗

相关问题 更多 >