如何获得数组A中与数组B中唯一值对应的所有最大值的索引?

时间:2017-11-26 11:30:11

标签: python-3.x numpy duplicates max unique

假设有一个观察时间ts的数组,每个观察时间对应于vs中的某个观察值。观察时间被视为经过的小时数(从零开始)并且可以包含重复项。我想找到与每个独特观察时间的最大观测值相对应的指数。 我要求索引而不是几个月前我问过的值unlike a similar question这样,我可以在各种数组上应用相同的索引。下面是一个示例数据集,我想用它来为更大的数据集调整代码。

import numpy as np
ts = np.array([0, 0, 1, 2, 3, 3, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10])
vs = np.array([500, 600, 550, 700, 500, 500, 450, 800, 900, 700, 600, 850, 850, 900, 900, 900])

我目前的做法是在没有重复时间的任何点分割值数组。

condition = np.where(np.diff(ts) != 0)[0]+1
ts_spl = np.split(ts, condition)
vs_spl = np.split(vs, condition)

print(ts_spl)
>> [array([0, 0]), array([1]), array([2]), array([3, 3, 3]), array([4, 4]), array([5]), array([6]), array([7]), array([8, 8]), array([9]), array([10])]

print(vs_spl)
>> [array([500, 600]), array([550]), array([700]), array([500, 500, 450]), array([800, 900]), array([700]), array([600]), array([850]), array([850, 900]), array([900]), array([900])]

在这种情况下,应计算任何重复时间的重复最大值。在这个例子中,返回的索引是:

[1, 2, 3, 4, 5, 8, 9, 10, 11, 13, 14, 15]
# indices = 4,5,6 correspond to values = 500, 500, 450 ==> count indices 4,5
# I might modify this part of the algorithm to return either 4 or 5 instead of 4,5 at some future time

虽然我还没有能够为我的目的调整这个算法,但我认为必须有可能利用vs_spl中每个先前拆分数组的大小来保持索引计数器。这种方法对于大型数据集是否可行(填充前每个阵列10,000个元素;填充后每个阵列70,000个元素)?如果是这样,我该如何适应它?如果没有,那么在这里可能有用的其他方法是什么?

0 个答案:

没有答案