gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:14 24 4
gpt4 key购买 nike

背景故事:

将数据汇集在一起​​以输入神经网络;作为文档(长字符串)开始;被分成句子,句子减少到 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/

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