【问题标题】:How can I find the values that are included in each of n arrays (Python)?如何找到每个 n 个数组(Python)中包含的值?
【发布时间】:2019-09-26 18:57:07
【问题描述】:

我会先说我是 Python 新手,但不是 OOP 新手。

我正在使用numpy.where 查找满足特定条件的 n 个数组中的索引,特别是如果数组中的值大于 x。

我想要做的是找到所有 n 个数组都满足该条件的索引 - 所以在每个数组中,在索引 y 处,元素大于 x。

n0[y] > x 
n1[y] > x
n2[y] > x
n3[y] > x

例如,如果我使用 numpy.where 后的数组是:

a = [0,1,2,3,4,5,6,7,8,9,10]
b = [0,2,4,6,8,10,12,14,16,18,20]
c = [0,2,3,5,7,11,13,17,19,23]
d = [0,1,2,3,5,8,13,21,34,55]

我想得到输出 [0,2]

我找到了函数numpy.isin,它似乎只对两个数组做了我想要的。我不知道如何将其扩展到两个以上的数组,并且不确定是否可能。

这是我的代码的开头,我在其中生成符合我的标准的索引:

n = np.empty([0])
n = np.append(n,np.where(sensor[i] > x)[0])

我有点卡住了。我知道我可以创建一个具有与原始数组相同数量的索引的新数组,并将其中的值设置为 true 或 false,但这不是很有效,而且我的原始数组有 25k+ 个元素。

【问题讨论】:

  • 你能把这个作为输入和预期输出的例子吗?如果没有 sensor 的示例暗示您提供的 a,b,c,d,则很难解决此问题

标签: python arrays python-2.7 numpy


【解决方案1】:

要找到n个不同数组的交集,首先将它们全部转换为集合。然后可以申请set.intersection()。对于abcd 的示例,只需执行以下操作:

set.intersection(*map(set, [a,b,c,d]))

这将产生一个集合{0, 2}

【讨论】:

  • 太好了,这行得通。对于将来面临这个问题的任何人 - 我有一个相交集的列表,其中第一个元素被 n0 转换为一个集合。下一个元素是 set.intersection(previous element, n1) 的输出,因此最终索引是所有索引集的交集。我不得不这样做,因为我不知道我会有多少输入。然后,我使用overlap = list(sorted(agreement_sets[i])) 将最终结果转换回列表,因为我需要这些指标以便将来进行操作。
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 2019-01-16
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多