You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars如何处理负数取模?如何使其结果与Numpy一致?

如何让Polars返回与NumPy一致的正取模结果?

Polars默认的mod方法对负数的处理逻辑和Python原生%、NumPy的mod不同——前者遵循截断除法(向零取整),后两者遵循地板除法(向负无穷取整),所以负数取模时结果符号有差异。

要让Polars返回和NumPy一致的正取模结果,可以手动实现地板除法对应的取模逻辑,核心公式是:
取模结果 = 被除数 - (被除数 / 除数的地板值) * 除数

代码示例

import polars as pl
import numpy as np

# 单值测试负数场景
x = -.1
df = pl.DataFrame({'x': x})

# 实现与NumPy对齐的取模逻辑
aligned_mod = df.select(
    pl.col('x') - (pl.col('x') / 2).floor() * 2
)
print(aligned_mod)  # 输出包含1.9的结果

# 批量多值对比测试
df = pl.DataFrame({'x': [-0.1, -1.5, 3.2, -4.7]})
df = df.with_columns(
    numpy_style_mod=pl.col('x') - (pl.col('x') / 2).floor() * 2,
    polars_default_mod=pl.col('x').mod(2),
    numpy_original=pl.col('x').map_elements(lambda x: np.mod(x, 2))
)
print(df)

逻辑说明

  • Polars默认mod:计算时先对x / y向零取整,再用x - (取整结果 * y)得到结果,因此负数会返回负余数
  • 手动实现的逻辑:先对x / y向负无穷取整(地板取整),再套用公式,最终得到和Python/NumPy一致的正余数

内容的提问来源于stack exchange,提问作者Paul Fleming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:56:07