The modulo operation (%) on negative numbers in Python

Originally published in:

Python 中负数取余问题​iphysresearch.github.io


最近发现在 Scipy 信号处理的原代码中,可以利用对负数取余的便利操作,进一步优化和清晰我们数据处理的过程。

“The % symbol in Python is called the Modulo Operator. It returns the remainder of dividing the left hand operand by right-hand operand. It's used to get the remainder of a division problem.” — freeCodeCamp

官方 Python 文档中对 % 或者完全等价的 operator.mod() (需要 import operator) 介绍不清楚,可以参考下面三个材料,写的非常好!

  • Useful references

    • Python Modulo in Practice: How to Use the `%` Operator - Real Python
    • The Modulo Operation (`%`) With Negative Numbers in Python - Gonzalo Ferreiro Volpi
    • The modulo operation on negative numbers in Python - Stack Overflow

上面,是我搜集了 3 个与 % 相关的讲的非常详细细致的教程帖子。下面,我直接简明扼要的介绍这个 “负数取余” 的 trick。


例子:

12 % 5, -12 % 5
# output
# (2, 3)

这是为什么呢?

在数学里,"负数取余"遵循的是:

如果 a 与 d 是整数,d 非零,那么余数 r 满足 a = q * d + r, q 为整数,且 0 <= |r| < |d|。

由此可见,我们的被除数 a = 12, 我们的商 d = 5,那么有两个余 r 满足条件,分别是一个负的余数 r1 = -2 和正的余数 r2 = 3,并且总有规律 r1 + r2 = d。

在计算机语言中,同号的整数运算,所有语言都遵循尽量让商小的原则,所以 12 mod 5 和 -12 mod -5 是一样的方式,结果差一个符号,分别是 `2` 和 `-2`。但是在异号的整数运算中,C 和 Java 都是尽可能让商 d 更大[1] (例如 -12 mod 5 的结果对应的是商 d = -2,余 r = -2),而 Python 则是会让商尽可能的小(例如 -12 mod 5 的结果对应的是商 d = -3,余 r = 3)。


最近,在我阅读 scipy/signal/spectral.py 的源代码时,看到在数据处理中使用“负数取余”可以写出更加简洁和清晰的代码。由此,进而可以给出如下的一种更好的理解方式:

还是 -12 mod 5 这个例子:

所以,有时候我们为了对时序数据计算 padding 等问题的时候,可以考虑令其数据长度为负,再整除以 step 后,来计算“余出”部分的数据长度,而不是“欠余”部分的数据长度。
参考自:Python 负数取余和整除问题 - csdn

参考

  1. ^参考自:Python 负数取余和整除问题 - csdn https://blog.csdn.net/qq_39268193/article/details/97900229

语言余一个负数_Python 中负数取余问题相关推荐

  1. java里面取余什么意思_java中%是取余运算符。

    [单选题] [单选题] [判断题]Hadoop存储系统HDFS的文件是分块存储,每个文件块默认大小为32MB [单选题]I think I am old enough and strong enoug ...

  2. python中的取余运算符是_python取余运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python中对负数求余的计算方法和求幂运算注意点python中对负数求余的计算 ...

  3. 小解的C语言笔记:循环中的取余操作 0%0

    循环中的取余操作 0%0 题目 总结 题目 p 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er sa ...

  4. Python负数的整除和取余

    Python语法对于负数的整除和取余与其他语法不同,在LeetCode刷题中经常会与答案不符,具体如下: 在负数整除中,永远是小于当前小数的最大整数,如下: 7 / -2 = -3.5,7//-2 = ...

  5. C++中的取余(rem)与取模(mod), 与实现fix函数

    定义 取余与取模定义并不一致, 如下: 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 求模运算和求余运算在 ...

  6. ArrayDeque中的取余

    Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字).而当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque:既然Queue只是一个接口, ...

  7. 求列表最大元素不用max_python3实现从一个无序列表中求取连续元素之和中最大的和...

    介绍 今天遇到一个需求,要求从一个无序列表中求取连续元素之和中最大的和.使用python做了实现,后来想着可以作为一个小知识点分享出来,或许能在某时某刻给某位同学一些帮助.下面就直接上代码(图片和文字 ...

  8. 计算机中的取余 ( % )

    取余的方式和取整的方式相关 向下取整,floor取整,例如: floor(7/3)=2,余数就是7-2×3=1,即7%3=1 floor(-7/3)=-3,余数就是-7-(-3)×3=2,即-7%3= ...

  9. java 取余运算 小数_java - 神奇的取余运算

    关于-10%-3=-1的问题 今天做了一道题,题目是这样的: 一下代码运行后输出结果是: int a=-10,b=-3; System.out.print(a%b); A.-1 B.2 C.-1 D. ...

  10. matlab程序二不能用于负数,matlab中负数的二进制码如何求取

    请学会在论坛中搜索 转载:http://blog.xdnice.com/blog40543i59178.html matlab提供了一个系统函数dec2bin,可以用来进行十进制数的二进制转换,不过功 ...

最新文章

  1. 【Android开发】消息处理类(Handler)与消息类(Message)介绍
  2. html 循环_一个不被程序员认为是编程语言的语言——HTML,你怎么看?
  3. pcl如何设置colorbar_突然加更 | 子图、colorbar和标题
  4. js动态的属性名如何取该属性的值
  5. js学习总结----简单的动画库封装tween.js
  6. numpy的科学计算(亲测)
  7. TypeScript 官方决定全面采用 ESLint
  8. ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware
  9. android端好用的gif生成器,gif字幕生成器
  10. Python学习笔记-2017.5.4thon学习笔记-2017.8.16
  11. 无线打印机 连接路由器连接到服务器,路由器连接打印机方法
  12. 异构网络互联(计算机网络)
  13. Windows配置环境变量
  14. JB的产品之旅-产品经理是干嘛的?
  15. Mybatis从入门到精通上篇
  16. 贝壳和字节、城里与城外
  17. SpringCloud NetFlix学习笔记(一)
  18. windows7 64 出现StackHash_0a9e的解决办法
  19. android中默认短信,android开发中设置默认短信应用的两种方法
  20. geoserver 发布地图案例

热门文章

  1. Html元素~~标签学习
  2. IDC:阿里云安全能力和IaaS市场份额双项领先
  3. Linux文件夹文件创建、删除
  4. linkin大话设计模式--抽象工厂
  5. Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover
  6. php js 终止,使用Server-Sent Events(和Javascript / PHP)的连接会立即停止
  7. Error: Cannot find module 'chalk' 或Cannot find module 'semver'报错
  8. uniapp开发原生android插件,uni-app原生插件(native plugin)开发指南
  9. 自动超频_超频的几种方式
  10. 计算机grand,The Grand