python - 将任意长度列表映射到固定长度,保留内部结果的频率和位置(尽可能多)

标签 python python-3.x algorithm

背景故事:

将数据汇集在一起​​以输入神经网络;作为文档(长字符串)开始;被分成句子,句子减少到 1 或 0,这取决于它们是否具有特征(在本例中为词类)。

问题是文档有不同数量的句子,所以句子和输入神经元之间不可能是 1-1;你必须训练固定数量的神经元(除非我遗漏了什么)。

所以,我正在研究一种算法,将数组映射到固定大小,同时尽可能多地保留数组中那些 1 的频率和位置(因为这是 NN 做出决定的依据。

代码:

假设我们的目标是固定长度的 10 个句子或神经元,并且需要能够处理更小和更大的数组。

new_length = 10
short = [1,0,1,0,0,0,0,1]
long  = [1,1,0,0,1,0,0,0,0,1,0,0,1]

def map_to_fixed_length(arr, new_length):
    arr_length = len(arr)
    partition_size = arr_length/new_length
    res = []
    for i in range(new_length):
        slice_start_index = int(math.floor(i * partition_size))
        slice_end_index = int(math.ceil(i * partition_size))
        partition = arr[slice_start_index:slice_end_index]
        val = sum(partition)
        res.append([slice_start_index, slice_end_index, partition])
        if val > 0:
            res.append(1)
        else:
            res.append(0)
    return res

可能不是很pythonic。无论如何,问题在于这是忽略了某些索引切片。例如,short 的最后一个索引被省略,并且由于四舍五入,各种索引也被省略。

这是我一直在做的工作的简化版本,主要是添加 if 语句来解决这留下的所有空白。但是有更好的方法吗?统计上更合理一点?

我正在查看 numpy,但所有调整大小的函数都只是用零或相当任意的东西填充。

最佳答案

一个简单的方法可能是像这样使用 scipy.interpolate.interp1d:

>>> from scipy.interpolate import interp1d

>>> def resample(data, n):
...     m = len(data)
...     xin, xout = np.arange(n, 2*m*n, 2*n), np.arange(m, 2*m*n, 2*m)
...     return interp1d(xin, data, 'nearest', fill_value='extrapolate')(xout)
... 
>>> resample(short, new_length)
array([1., 0., 0., 1., 0., 0., 0., 0., 0., 1.])
>>> 
>>> resample(long, new_length)
array([1., 1., 0., 1., 0., 0., 0., 1., 0., 1.])

关于python - 将任意长度列表映射到固定长度,保留内部结果的频率和位置(尽可能多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50649875/

相关文章:

python - 如何修复 Python pip install openai 错误 : subprocess-exited-with-error

python - 在 KenKen 谜题 'multiply' 域中找到所有可能的因素

c - 无法理解竞争性考试?

python - 对于 scrapy/selenium 有没有办法返回到上一页?

python-3.x - python : save pandas data frame to parquet file

python - AttributeError: 'RegexpReplacer' 对象没有属性 'replace'

arrays - 用于修剪数组中大值的数据结构?

python - 使用 Django 查询集访问不同的外键关系

python - 经理不在; 'auth.User' 已被替换为 'polls.User'

Python:如何使用 psycopg2 将字符串传递给 postgres 命令