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

问题描述

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

        if arg1 == False:
            return 'arg1: '+str('blah')+',arg2: '+str(arg2)
        else:
            return 'arg1: '+str(arg1)+',arg2: '+str(arg2) 
a1的形状为(1、56)和a2(1、38)。我相信他们的每一列都是一个包含一些值的元组。所以a1有56个元组,而a2有38个元组。 a1和a2都具有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,-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)]] 并键入dtype('O')

我想做的是比较这两个数组的元组,并且最好得到形状(1,xx)的另一个数组,或者至少得到另一个包含那些在它们之间不共享的元组的列表。我怎样才能做到这一点? 我想做的是

numpy.ndarray

但是l1最终给了我2128的长度,这不是事实(l1 = [] for i in a1: for j in a2: for ii in i: for jj in j: if ii != jj: l1.append(ii) 应该返回列表中的元组数),即使它看起来像是带有元组的列表:{{1} }。我也很确定自己的实现不正确。

解决方法

尝试一下:

a1 = [(1.1,1.15),(1.2,(0.4,1.15)]
a2 = [(2.1,(2.2,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,(2.1,1.15)]