【问题标题】:How to get the position of same Values in multiple Numpy arrays [closed]如何在多个 Numpy 数组中获取相同值的位置 [关闭]
【发布时间】:2020-10-03 00:23:34
【问题描述】:

我有几个带有传感器数据的 numpy 数组。我需要同时为每个数组分配位置,以便将它们分配在一起。

数组看起来像这样,但值更多(大约 1000 个,我有 21 个数组):

x1 = [0, 1, 3, 4, 7, 10]

x2 = [1, 3, 7, 8, 9, 10, 11, 12]

x3 = [0, 1, 3, 7, 9, 10]

xn = [1, 3, 6, 7, 8, 9, 10, 11]

现在我需要知道每个数组的位置,如果值存在于所有数组中。在示例中,这将是时间戳 1、3、7 和 10 在所有 21 个数组中的位置。

一如既往地感谢每一个帮助!

【问题讨论】:

  • 你最好用一套来做类似的事情

标签: python arrays python-3.x numpy numpy-ndarray


【解决方案1】:

这是一种相当原始的方法(图示为 3 个数组,但很容易扩展到任意数量的数组):

x1 = np.array([0, 1, 3, 4, 7, 10])
x2 = np.array([1, 3, 7, 8, 9, 10, 11, 12])
x3 = np.array([0, 1, 3, 7, 9, 10])

arrays = [x1, x2, x3]

获取所有数组中的值(将数组值打包成集合并与所有集合相交):

from functools import reduce

values = reduce(set.intersection, arrays, set(x1))

结果:

{1, 10, 3, 7}

然后为每个值从数组中选择相应的索引并将它们打包到字典中:

indices = {value: tuple(i
                        for array in arrays
                        for i in range(len(array))
                        if array[i] == value)
           for value in values}

结果:

{1: (1, 0, 1), 10: (5, 5, 5), 3: (2, 1, 2), 7: (4, 2, 3)}

但是:这只适用于数组中的值是唯一的!

【讨论】:

  • reduce函数可以是set.intersect,不需要lambda
  • 我怀疑结果作为 numpy 数组会更有用
  • @MadPhysicist 好点子,尽可能避免使用 lambda。会更新。
  • 他们是独一无二的!非常感谢,我回家后马上试试
  • 有一种趋势,特别是在新用户中,保留旧版本的一切。没有必要这样做。最好保留最简洁的版本,并依靠修订历史来完成工作。这样您的答案将是最好的,没有任何不必要的麻烦。
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多