【问题标题】:How to match elements of two arrays and return a value如何匹配两个数组的元素并返回一个值
【发布时间】:2016-09-26 07:09:31
【问题描述】:

我正在寻求帮助来改进我的代码。我有两个不同大小的数组,我将一个数组的值分配给另一个数组的索引。 例如

a = np.array([[1,5],[2,8],[3,2],[4,6]])
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]])

我正在计算第一列中的项目,然后将 a 的第二列中的值分配给 b 中的相应行。

c = np.zeros([len(b),1])
for i in tqdm(range(len(b))):
    for j in range(len(a)):
        if b[i,0]==a[j,0]:
            c[i] = a[j,1]

返回

c = [[5],[5],[8],[6],[6],[8],[2],[8],[2]]

问题是我有一个非常大的数据集,for 循环需要很长时间才能运行。任何建议将不胜感激。谢谢。

【问题讨论】:

  • 您使用哪种语言?
  • Code Review 用于需要优化的工作代码。
  • 对不起,我用的是python
  • 刚刚添加了python标签。
  • @TimBell tqdm 是什么?

标签: python arrays


【解决方案1】:

a 的格式是否总是[[1, ...], [2, ...], [3, ...], ...]

如果是这样,那么您可以通过不遍历 a 而只是对其进行索引来节省时间。例如:

a = np.array([[1,5],[2,8],[3,2],[4,6]])
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]])

c = np.array([[a[i[0] - 1][1]] for i in b])
# c = [[5], [5], [8], [6], [6], [8], [2], [8], [2]]

这将采用b 时间的大小顺序,而不是a 大小的顺序乘以b 时间的大小。

【讨论】:

  • 谢谢。这就是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2022-01-27
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多