我正在尝试为神经元网络预处理数据集。因此,我需要将形状为 (2040906, 1) 的数组重塑为批次数组。
我需要大约 1440 行的批量大小,但 2040906 显然不能被该数字整除(余数为零)。
我试图只计算除法的模数并删除与余数一样多的行,因此除法将导致模数为零。但是删除数据集的行不是我想要做的。
所以这是一个重现问题的示例片段。
import numpy as np
x = np.ones((2040906, 1))
np.split(x, 1440)
对我来说,完美的解决方案是某种函数,它返回余数为 0 的给定值的最近除数。
最佳答案
不确定这是最优雅的解决方案,但您可以执行以下操作:
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]
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/