我有一点复杂的问题。我有两组数组,让我们调用第一个数组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
,但我不确定在这种情况下如何使用它。谢谢!
答案 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)