【问题标题】:Find non-matching tuples within a numpy ndarray of different shape在不同形状的 numpy ndarray 中查找不匹配的元组
【发布时间】:2020-12-04 04:35:15
【问题描述】:

我有两个 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.dypea2.dtype 是什么?
  • 刚刚编辑。好点了吗?

标签: python-3.x list numpy multidimensional-array tuples


【解决方案1】:

试试这个:

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)]

【讨论】:

  • a1 和 a2 应该是 nd.array,而不是列表。
  • 无论如何,相同的代码都可以工作。数组可以转换成集合。可以使用 in 关键字访问数组。数组可以通过 for i in 进行迭代
  • 它给了我,TypeError: unhashable type: 'numpy.ndarray'
  • 嗯。试试这个解决方案吧?
猜你喜欢
  • 2016-05-13
  • 2019-10-20
  • 2016-05-03
  • 2016-12-19
  • 1970-01-01
  • 2019-04-20
  • 2021-07-14
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多