gpt4 book ai didi

python - 如何使用模零找到给定值的最近除数

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:30 26 4
gpt4 key购买 nike

我正在尝试为神经元网络预处理数据集。因此,我需要将形状为 (2040906, 1) 的数组 reshape 为批处理数组。

我需要大约 1440 行的批量大小,但 2040906 显然不能被该数字整除(余数为零)。

我试图只计算除法的模数并删除与余数一样多的行,这样除法将导致模数为零。但是删除数据集的行并不是我想要做的。

所以这是一个重现问题的示例片段。

import numpy as np

x = np.ones((2040906, 1))

np.split(x, 1440)

对我来说完美的解决方案是某种函数,它返回给定值的最近除数,余数为 0。

最佳答案

不确定这是最优雅的解决方案,但您可以执行以下操作:

  1. 获取相关数字的所有除数
def getDivisors(n, res=None) : 
res = res or []
i = 1
while i <= n :
if (n % i==0) :
res.append(i),
i = i + 1
return res

getDivisors(2040906)
Out[4]:
[1,
2,
3,
6,
7,
14,
21,
42,
48593,
97186,
145779,
291558,
340151,
680302,
1020453,
2040906]
  1. 返回最接近的除数
def get_closest_split(n, close_to=1440):
all_divisors = getDivisors(n)
for ix, val in enumerate(all_divisors):
if close_to < val:
if ix == 0: return val
if (val-close_to)>(close_to - all_divisors[ix-1]):
return all_divisors[ix-1]
return val

def get_closest_split(n, close_to=1440)
Out[6]: 42

在您的情况下,将返回 42 作为唯一最接近 1440 的除数。因此,np.split(x, 42) 应该有效。

关于python - 如何使用模零找到给定值的最近除数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com