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

PyTorch生成和为0的随机整数原理及Numpy对应实现咨询

问题解答

一、PyTorch代码为啥能得到总和为0的结果

说白了,这就是个巧合,不是通用的生成总和为0随机数的方法:

  • torch.randint(-8,9,(50,1),dtype=torch.float) 是生成-8到8之间的随机整数(因为randint的上限是开区间,实际取不到9),再转成float类型。
  • 你设置了种子71,随机数生成器的输出就固定死了,刚好这次生成的50个数加起来凑成了0。要是换个种子(比如改成72),或者把生成数量改成49,总和基本就不是0了。这段代码本身根本没做任何保证总和为0的逻辑。

二、Numpy怎么生成总和为0的随机整数数组

要靠谱生成总和为0的数组,不能碰运气,得主动调整数值,给你两种实用方法:

方法1:生成后补全最后一个数

先搞n-1个随机整数,最后一个数直接设成前面所有数总和的相反数,保证整体加起来是0:

import numpy as np

# 设置随机种子确保结果可复现
np.random.seed(71)
count = 50
# 先生成49个[-8,8]的随机整数
arr = np.random.randint(-8, 9, size=count-1)
# 补上最后一个数,让总和归0
arr = np.append(arr, -arr.sum())
# 验证一下
print(arr.sum())  # 输出肯定是0

方法2:生成对称数组(适合偶数长度)

生成一半数量的随机数,再拼上它们的相反数,打乱顺序就行,天然总和为0:

import numpy as np

np.random.seed(71)
count = 50
# 生成25个[-8,8]的随机整数
half_arr = np.random.randint(-8, 9, size=count//2)
# 拼上相反数,再打乱顺序
arr = np.concatenate([half_arr, -half_arr])
np.random.shuffle(arr)
print(arr.sum())  # 输出0

内容的提问来源于stack exchange,提问作者Hamed Zeinalzadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:15:08