如何截取理论数组的子数组以匹配实验数组的形状?
从理论数组中提取与实验数组匹配的对应元素
以下是几种Python实现方法,可根据数据规模和使用场景选择:
方法一:基础遍历匹配(适合小规模数据)
直接遍历实验数组的x值,找到其在理论数组中的位置,提取对应元素:
x1 = [1,2,3,4,5,6,7,8,9,10] y1 = [1,4,9,16,25,36,49,64,81,100] x2 = [3,5,7,9] x1_new = [] y1_new = [] for val in x2: idx = x1.index(val) x1_new.append(val) y1_new.append(y1[idx]) print(x1_new) # 输出: [3, 5, 7, 9] print(y1_new) # 输出: [9, 25, 49, 81]
注意:此方法要求x1中的元素唯一,否则index()只会返回第一个匹配值的索引。
方法二:列表推导式简化写法
通过zip()将理论数组的x、y值配对,再筛选出与实验数组匹配的项:
x1 = [1,2,3,4,5,6,7,8,9,10] y1 = [1,4,9,16,25,36,49,64,81,100] x2 = [3,5,7,9] # 配对x1和y1的对应元素 paired_data = list(zip(x1, y1)) # 筛选出x值在x2中的项 filtered_data = [item for item in paired_data if item[0] in x2] # 拆分回两个列表 x1_new, y1_new = zip(*filtered_data) # 转换为列表类型(可选,zip返回的是元组) x1_new = list(x1_new) y1_new = list(y1_new) print(x1_new) print(y1_new)
方法三:numpy高效处理(适合大规模数值数组)
如果数据是numpy数组,用向量操作会更高效:
import numpy as np x1 = np.array([1,2,3,4,5,6,7,8,9,10]) y1 = np.array([1,4,9,16,25,36,49,64,81,100]) x2 = np.array([3,5,7,9]) # 生成掩码,筛选x1中属于x2的元素 mask = np.isin(x1, x2) x1_new = x1[mask] y1_new = y1[mask] # 确保结果顺序与x2一致(若x2顺序和x1中元素出现顺序不同时需要) sorted_indices = np.argsort(np.searchsorted(x1, x2)) x1_new = x1_new[sorted_indices] y1_new = y1_new[sorted_indices] print(x1_new) # 输出: [3 5 7 9] print(y1_new) # 输出: [ 9 25 49 81]
内容的提问来源于stack exchange,提问作者werghuiop
相关产品推荐
相关产品推荐

