1
Oldletter 308 天前 1
那按照您的描述
[1, 5, 8, 10] 是不是也符合您的需要 |
2
lsk569937453 308 天前 1
你需求也没清楚啊:
a.1 2 4 6 8 100 101 200 205 1000 b.1 2 4 6 8 10 12 14 16 1000 c.1 200 400 600 800 1000 20000 上面 a,b,c 三种情况应该输出什么? |
3
winglight2016 308 天前 1
不是 gpt 不理解“分散”,而是你自己都不知道。
另外,不讲需求就提算法,除非是很成熟的案例,不然也是没法 design 的 |
4
error451 308 天前 1
n =1 中间值
n = 2 首尾 n = 3 首尾 + 中间值 n > 3 去掉首尾, 然后把中间的序列按照 len / (n-2) 分块,每一块取中间值 |
5
NoOneNoBody OP @lsk569937453 #2
原数列本来就密度不均的话,那也是没办法,只能抽取,不能生成 a 应是 1,100,205, 1000 b: 1, 8, 16, 1000 c:1, 600, 1000, 20000 @Oldletter #1 不需要唯一答案,只需要基本满足条件,其实就是减少随机抽样出现“密度过于集中”这种不可控的情况,人为干预一下 |
6
yuyue001 308 天前 1
In [19]: import numpy as np
In [20]: l = [1,2,3,5,7,8,9,10] In [21]: res = [l[i] for i in np.arange(len(l))[::2]] In [22]: res[-1] = l[-1] In [23]: res Out[23]: [1, 3, 7, 10] GPT 往往不太擅长处理数学问题。 |
7
Oldletter 308 天前 1
def select_numbers_optimized(seq, n):
# 计算总间隔数:相邻数字之间的差值总和 intervals = [seq[i + 1] - seq[i] for i in range(len(seq) - 1)] # 计算目标间隔长度:将总间隔数除以(n-1),得到每个子区间的目标间隔长度 target_interval_length = sum(intervals) / (n - 1) selected, current_interval_length = [seq[0]], 0 for i in range(len(intervals)): current_interval_length += intervals[i] # 当累积的间隔长度达到或超过目标间隔长度时,选择当前数字 if current_interval_length >= target_interval_length: selected.append(seq[i + 1]) current_interval_length = 0 if len(selected) == n - 1: # 如果已选择了 n-1 个数字,则停止循环 break selected.append(seq[-1]) # 总是包括序列的最后一个数字 return selected if __name__ == '__main__': sequence = [1, 2, 3, 5, 7, 8, 9, 10] n = 4 selected_numbers_optimized = select_numbers_optimized(sequence, n) print("干预后选出的数字:", selected_numbers_optimized) |
8
NoOneNoBody OP @yuyue001 #8
我本意是想 gpt 帮我找找哪个包的方法能实现,它阅读的手册肯定比我多很多,我以为 sklearn 有方法已经能完成这个,没想到没有找到 |
9
Famio 308 天前 1
不专业的回答一下,这个和滤波过程有点像,我在做 realsense 深度处理的时候,是这样处理的:
例如取 10 帧画面的值,然后再取平均值,这个平均值和 10 帧中最接近的那个值就是我滤剩的结果。 |
10
Puteulanus 308 天前 1
感觉跟之前看向量数据库的描述有点像,你想要的是不是聚类算法
|
11
NoOneNoBody OP @Famio #9
和我的思路很接近,只是这个思路处理密度接近均匀的可行,但我没想好#2 所说那种密度不均的情况,而且这种样本可能性不小 |
12
mkroen 308 天前 1
这个问题在于怎么理解“分散”
1.理解为中位数 ①结果可以固定,自带 range 就能实现 ②结果需要随机,分段随机就行 2.理解为平均数(分位数) ①根据分位数分成多段,分别进行随机 我理解 OP 的意思是分位数 |
13
Puteulanus 308 天前 1
|
14
bugcoder 308 天前 1
找一下画直方图的时候,找不等的 bin size 的算法
|
15
NoOneNoBody OP @bugcoder #14
刚写完,还真是用了直方图计数,大致原理是这几句 bin_edges = np.linspace(np.min(sequence), np.max(sequence)+.1, n+1) hints, _ = np.histogram(sequence, bins=bin_edges) indices = np.cumsum(hints)[:-1] arr = np.split(sequence, indices) 然后从 arr 逐个按权重提取 |