问题描述
我有两个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)]