gpt4 book ai didi

python - 当数组非常大时,根据另一个数组的范围有效地分离数组的一部分

转载 作者:行者123 更新时间:2023-12-01 01:34:19 27 4
gpt4 key购买 nike

我有两组 numpy 数组:x1,y1 和 x2,y2。我想在 y2 数组中保留所有具有匹配 y 坐标的 x1 和 y1 值。我们可以假设所有 y2 值都存在于 y1 数组中。

例如

x1 = [5,6,7,8,9,0] 
y1 = [1,2,3,4,5,6]
x2 = [5,4,3,2]
y2 = [2,3,4,5]

#as y2 values 2,3,4,5 are present in y1, I want the output to be:
x1 = [6,7,8,9] y1 = [2,3,4,5]

因此,所有输出数组的大小相同,并且具有相同的 y 坐标。

我可以使用以下代码来做到这一点。然而,我想要使用的数组的大小> 100k,这使得速度非常非常慢且效率低下。有一个更好的方法吗?速度和效率是我的主要目标,如果我学到更好的方法那就是额外的奖励!提前致谢!!

x1 = [5,6,7,8,9,0]
y1 = [1,2,3,4,5,6]

x2 = [11,12,13,14]
y2 = [2,3,4,5]

max1 = max(y2)
min1 = min(y2)

for i, y in enumerate(y1):
if (y >= min1) and (y <= max1):
print (x1[i],y)

最佳答案

使用numpy为了性能。在一次传递中查找两个列表相同的匹配索引,并使用这些匹配索引对 numpy 数组进行切片

import numpy as np
x1 = [5,6,7,8,9,0]
y1 = [1,2,3,4,5,6]
y2=[2,3,4,5]
x2_indices=[i for i, item in enumerate(y1) if item in y2] #[1, 2, 3, 4]
x2=np.array(x1)[x2_indices]
print(x2,y2) #(array([6, 7, 8, 9]), [2, 3, 4, 5])

如果寻找一个类轮并且应该比之前的更快(尚未测试)

import numpy as np
print(np.array(x1)[np.nonzero(np.in1d(y1, y2))[0]]) #[6, 7, 8, 9])

关于python - 当数组非常大时,根据另一个数组的范围有效地分离数组的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52519451/

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