gpt4 book ai didi

python - 匹配两个 Python 列表的长度

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:42 25 4
gpt4 key购买 nike

我有两个不同长度的 Python 列表。人们可能会假设其中一个列表比另一个列表大数倍。

两个列表包含相同的物理数据,但使用不同的采样率捕获。

我的目标是对较大信号进行下采样,使其具有与较小信号完全一样多的数据点。

我想出了下面的代码,它基本上完成了工作,但既不是很 Pythonic 也不能以高效的方式处理非常大的列表:

import math

a = [1,2,3,4,5,6,7,8,9,10]
b = [1,4.5,6.9]

if len(a) > len(b):
div = int(math.floor(len(a)/len(b)))
a = a[::div]
diff = len(a)-len(b)
a = a[:-diff]
else:
div = int(math.floor(len(b)/len(a)))
b = b[::div]
diff = len(b)-len(a)
b = b[:-diff]
print a
print b

如果更有经验的 Python 用户可以详细说明解决此任务的替代方法,我将不胜感激。

非常感谢任何回答或评论。

最佳答案

这里是代码的简化版本(不一定有更好的性能):

a = [1,2,3,4,5,6,7,8,9,10]
b = [1,4.5,6.9]
order = 0 # To determine a and b.

if len(b) > len(a):
a, b = b, a # swap the values so that 'a' is always larger.
order = 1

div = len(a) / len(b) # In Python2, this already gives the floor.
a = a[::div][:len(b)]

if order:
print b
print a
else:
print a
print b

由于您最终要丢弃较大列表中后面的一些元素,显式的 for 循环可能会提高性能,因为这样您就不必“跳转”到将要执行的值被丢弃:

new_a = []
jump = len(b)
index = 0
for i in range(jump):
new_a.append(a[index])
index += jump
a = new_a

关于python - 匹配两个 Python 列表的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965444/

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