在不同形状的numpy ndarray中查找不匹配的元组



我有两个2D numpy nd.array,看起来像这样:

array([[(8.740896690597141, 8.876692713421095, 9.00851158974712, 9.145444068354191, 9.28408129961672, 9.426695633486075, 9.566468862997622, 9.70794682093236, 9.851129327791336, 9.990902871495557, 10.129539951526514, 10.265904353744476, 10.40454167736898, 10.543746833476504, 10.682951919430115, 10.823861548201764, 10.966476001036952, 11.10681734189823, 11.247727003018403, 11.389205061890092, 11.527842080908012, 11.668183544206574, 11.806820362768068, 11.94772988939585, 12.087503256187054, 12.226139931642832, 12.365345188462726, 12.501141069620031, 12.63580046285405, 12.7704603017515, 12.907392448778293, 13.040915592759664, 13.176711179228963, 13.31307531579448, 13.444325882558912, 13.576712518723577, 13.702849407037908, 13.834668107505598),
.......
(-1.7763376710569024e-15, -8.881688355284512e-16, -8.881688355284512e-16, -6.256959093984815e-45, -2.6645065065853547e-15, 8.881688355284512e-16, 1.7763376710569024e-15, -8.881688355284528e-16, -1.7763376710583362e-15, -8.881688367982712e-16, -6.976150340436319e-22, -8.884757285153119e-16, 1.667635949256822e-15, -2.445688419777969e-13, 0.001298687125012586, 0.0051947468116605, 0.011688217537574272, 0.02597380302395519, 0.0610384249844283, 0.11623284819571751, 0.21233632725859825, 0.3688290858006328, 0.5986981211575598, 0.8798660249474886, 1.1805150938825832, 1.4831127306517058, 1.7454516703850584, 1.9422065934803932, 2.0668840371446056, 2.147405298608788, 2.2077963194793107, 2.2558490058162874, 2.3019535171451637, 2.3487070647624013, 2.3961098331218684, 2.4415644758219766, 2.4837724552990386, 2.525330908842052)]]

a1具有(1,56(和a2(1,38(的形状。我相信,它们的每一列都是一个包含一些值的元组。所以a1有56个元组,a2有38个元组。a1和a2都具有dtype('O')和类型numpy.ndarray

我想做的是比较这两个数组的元组,最好得到另一个形状为(1,xx(的数组,或者至少只是另一个列表,其中包含它们之间不共享的元组。我该怎么做?我想做的是

l1 = []
for i in a1:
for j in a2:
for ii in i:
for jj in j:
if ii != jj:
l1.append(ii)

但是l1最终给了我2128的长度,这不应该是事实(len(l1)应该返回列表中元组的数量(,尽管它看起来像是一个包含元组的列表:[(....), (....)]。我也很确定我的实现是不正确的。

试试这个:

a1 = [(1.1, 1.15), (1.2, 1.15), (0.4, 1.15)]
a2 = [(2.1, 1.15), (2.2, 1.15), (0.4, 1.15)]
merged = []
merged += [(x) for x in a1 if x not in a2]
merged += [(x) for x in a2 if x not in a1]
print(merged)
# >>> [(1.1, 1.15), (1.2, 1.15), (2.1, 1.15), (2.2, 1.15)]

最新更新