Ste*_*ven 6 python numpy pandas
我正在尝试为神经元网络预处理数据集。因此,我需要将形状为 (2040906, 1) 的数组重塑为批次数组。
我需要大约 1440 行的批量大小,但 2040906 显然不能被该数字整除(余数为零)。
我试图只计算除法的模数并删除与余数一样多的行,因此除法将导致模数为零。但是删除数据集的行不是我想要做的。
所以这是一个重现问题的示例片段。
import numpy as np
x = np.ones((2040906, 1))
np.split(x, 1440)
Run Code Online (Sandbox Code Playgroud)
对我来说,完美的解决方案是某种函数,它返回余数为 0 的给定值的最近除数。
由于两个原因,寻找最大除数并不是一个好方法。
更好的想法是用从整个数据集中随机选择的样本填充数据集,使其可被最佳批量大小整除。这是计算可被 1440 整除的填充数组大小的简单技巧
(-x.shape[0] % 1440) + x.shape[0]
然而,当数据是有序的(如时间序列)时,则不能使用填充,因为无法构造填充数据的代表性内容。
另一种解决方案是最小化截断数据。人们可以搜索可用填充的范围,以找到需要最少截断的情况。
def find_best_divisor(size, low, high, step=1):
minimal_truncation, best_divisor = min((size % divisor, divisor)
for divisor in range(low, high, step))
return best_divisor
Run Code Online (Sandbox Code Playgroud)
这种方法很好,因为它可以很好地利用数据并使用适合训练的填充。