通过索引过滤Numpy值 修复数组比较报错获取预期输出
代码修复方案
错误原因
- 语法错误:相等判断误用了赋值运算符
=,应该用比较运算符==,同时np.where的参数传递不符合语法要求,触发positional argument follows keyword argument报错 - 逻辑错误:两个unix时间数组长度不一致,直接逐位比较会触发numpy广播机制,无法正确匹配到两个数组共有的时间点对应的索引
修复后代码
import numpy as np a=np.array(["Short","Long","Short","Long","Short","Long"]) b=np.array(["Short","Long","Short","Long"]) c=np.array(["Short","Long","Short","Long","Long","Long"]) unix_a=np.array([1624580882,1624584458,1624589467,1624592213,1624595336,1624596349]) unix_b=np.array([1624580882,1624584458,1624595336,1624596349]) unix_c=np.array([1624580882,1624584464,1624589495,1624592238,1624595350,1624596380]) def Compare(val,val2, unix_val, unix_val2): # 取两个unix数组的交集,同时返回对应两个数组的索引 common_unix, idx_unix_val, idx_unix_val2 = np.intersect1d(unix_val, unix_val2, return_indices=True) # 按共同时间点过滤两个val数组 filtered_val = val[idx_unix_val] filtered_val2 = val2[idx_unix_val2] # 匹配val相等的位置,返回原始unix_val对应的索引 equal_mask = filtered_val == filtered_val2 return idx_unix_val[equal_mask].tolist() print(Compare(a, b, unix_a, unix_b)) print(Compare(a, c, unix_a, unix_c))
运行输出
[0, 1, 4, 5] [0]
完全符合预期要求。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

