Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用模零找到离给定值最近的除数_Python_Pandas_Numpy - Fatal编程技术网

Python 如何用模零找到离给定值最近的除数

Python 如何用模零找到离给定值最近的除数,python,pandas,numpy,Python,Pandas,Numpy,我正在尝试对神经网络的数据集进行预处理。因此,我需要将形状为(2040906,1)的数组重塑为批次数组 我需要一个大约1440行的批处理大小,但是2040906显然不能除以该数字(剩余部分为零) 我试着只计算除法的模,并删除尽可能多的行作为余数,这样除法将得到零的模。但我不想删除数据集的行 这是一个重现问题的示例片段 将numpy导入为np x=np.一((2040906,1)) np.拆分(x,1440) 对我来说,最理想的解决方案是某种函数,它为余数为0的给定值返回最近的除数。由于两个原因

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

我需要一个大约1440行的批处理大小,但是2040906显然不能除以该数字(剩余部分为零)

我试着只计算除法的模,并删除尽可能多的行作为余数,这样除法将得到零的模。但我不想删除数据集的行

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

将numpy导入为np
x=np.一((2040906,1))
np.拆分(x,1440)

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

由于两个原因,寻找最大除数不是一个好方法

  • 数组的大小可能是素数
  • 除数可能太大或太小,导致学习无效
  • 更好的方法是使用从整个数据集中随机选择的样本填充数据集,使其可被最佳批量大小分割。下面是计算可被1440整除的填充数组大小的简单技巧

    (-x.shape[0]%1440)+x.shape[0]

    然而,当数据被排序时(如时间序列),则不能使用填充,因为无法构造填充数据的代表性内容

    另一种解决方案是最小化被截断的数据。可以搜索一个可用的填充区域,以查找需要最小截断的区域

    def find_best_除数(大小、低、高、步长=1):
    最小截断,最佳除数=min((大小%除数,除数)
    用于范围内的除数(低、高、阶跃))
    返回最佳除数
    

    这种方法很好,因为它允许很好地利用数据并使用适合于培训的填充。

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

  • 获取有关数字的所有除数
  • def getdivisions(n,res=None):
    res=res或[]
    i=1
    而i(接近-所有除数[ix-1]):
    返回所有_除数[ix-1]
    返回值
    def获取最近的分割(n,接近=1440)
    Out[6]:42
    

    在你的例子中,它将返回42作为唯一最接近1440的除数。因此,
    np.split(x,42)
    应该可以工作。

    您是否希望分解
    2040906
    ?您可以使用(-2040906)%1440个样本填充数据集,从而使数据集可以按批量大小进行分割。用于填充的额外样本应该从整个数据集中随机选择。我认为这可能是问题的解决方案,因为我可以获得每个因子,并可以提取最接近我的值的因子,不是吗?填充的意思是填充或裁剪我的数据集?@Steven我的意思是填充。你不能用零填充最后一批,因为它会训练你的神经网络。您不能重复某些选定的样本,因为它会使训练偏向该样本。最好的解决方案是从数据集中随机选择填充数据。我知道,这绝对有效,但我有时间序列数据,我想从中进行训练。因此,我不能随机填写数据,如果我错了,请纠正我。应该提到的事实是,这是时间序列数据。我现在明白了。如果对数据进行排序,则随机选择将失败。也许可以在最后一次迭代中使用较小的批处理。我想keras就是这么做的。我会搜索一下,然后试试。谢谢你的建议。是的,看起来就像我想要的那个。有趣的是答案是42透^^