矢量化从边界找到最小值的索引

时间:2017-09-26 05:21:56

标签: python arrays numpy

我有一点复杂的问题。我有两组数组,让我们调用第一个数组possible_values并将第二个数组调用为boundary。第一个数组形状是(n,)数组中的每个值都是可能值的list。第二个数组形状是(n,2),其中值是(min_value,max_value)。

我想得到的是possible_values满足边界条件的最小索引:它必须大于min_value,但它必须更小或者等于max_value。这是我的问题的一个例子。

import numpy as np
possible_values = np.array([[0.0,0.1,0.2,0.3,0.4,0.5],[0.3,0.5,0.7],[0.2,0.5,0.8]])
boundary = np.array([[0.1, 0.4], [0.2,0.7],[0.1,0.15]])

这会给我结果:

array([2, 0, None])

然而,这段代码非常慢。还有更好的推荐吗我试着看np.minimum.reduceat,但我不确定在这种情况下如何使用它。谢谢!

1 个答案:

答案 0 :(得分:-1)

我找到了很好的解决方案

def padding(arr, n):
    np.array([arr for i in range(0,n)]).T

possible_values = np.array([[0.0,0.1,0.2,0.3,0.4,0.5[0.3,0.5,0.7,-1,-1,-1],[0.2,0.5,0.8,-1,-1,-1]])
boundary = np.array([[0.1, 0.4], [0.2,0.7],[0.1,0.15]])
start_pt = fast_tile_axis1(boundary[:,0], possible_values.shape[1])
end_pt = fast_tile_axis1(boundary[:,1], possible_values.shape[1])
is_within_range = (start_pt < possible_values) & (end_pt > 
possible_values)
np.where(np.any(is_within_range, axis=1), np.argmax(is_within_range,axis=1), -1)