【问题标题】:Fastest way to return adjacent value in numpy array在numpy数组中返回相邻值的最快方法
【发布时间】:2019-12-23 12:19:11
【问题描述】:

我有两个保存日期和时间的 numpy 数组。每天的时间不一定匹配,所以我需要运行以检查以找到匹配的匹配项。

因此,我目前创建了一个简单的 UDF,它返回通过的日期的时间。但这需要很长时间,因为数组很大。

以下是我当前的代码,我已将其分解为基本原则:

import numpy as np

#my arrays
arr1 = np.array([[20/12/2019, 16:00], [21/12/2019, 12:00], [22/12/2019, 15:00]])
arr2 = np.array([[20/12/2019, 16:00], [21/12/2019, 15:00], [22/12/2019, 16:00]])

#udf
def get_time(index_date):
    for i in range(arr2.shape[0]-1):
        if arr2[i,0] == index_date:
            return arr2[i,1]
            break

#loop through main data
for i in range(arr1.shape[0]-1):
    if arr1[i,1] = get_time(arr1[i,0]):
        print('match')
        break

上述方法有效,但相当缓慢且繁琐。我知道还有类似下面的内容:

if value in my_array[:, col_num]:

但这不会返回相邻时间,它只会检查日期是否存在。

我的问题:

找到索引后,循环遍历 numpy 数组以返回相邻值的最快方法是什么?

【问题讨论】:

  • 如果日期是唯一的,为什么不设置两个pandas数据框并在日期列上合并它们?
  • 你的数组的元素是字符串还是日期时间?
  • 它们是类型字符串@Kalpit

标签: python arrays numpy


【解决方案1】:

这是一种解决方法,只有在您不能使用 Rafael 的解决方案时才有用。我们替换临时数组中的日期以检查哪些坐标具有自定义值。

你可以使用

for row in np.array(np.where(np.core.defchararray.replace(p,old="21/12/2019",new="")==''))[0]:
    #Prints time where date == 21/12/2019
    print(p[row,1])

这将找到目标日期的行坐标,这可以让您获得下一列,在您的情况下是时间。检查多个值、迭代要检查的值并替换内部旧值是很简单的。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 2018-06-27
    • 2021-08-05
    • 2017-02-24
    • 1970-01-01
    • 2018-04-15
    • 2014-02-17
    相关资源
    最近更新 更多