2017-09-26 58 views
-1

我有一點複雜的問題。我有兩組數組,我們可以調用第一個數組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

你有一個'boundary'陣列,並在你的榜樣了'min_max'陣列,而不是一個'possible_values'陣列很好的解決方案。你的邊界陣列也有怪異的形狀/ dtype;沒有什麼比建議之前的文本(而是,'min_max'數組看起來更像是您建議的邊界樣式數組,'n = 3')。請確保您的示例代碼是準確的並且可行。 – Evert

回答

-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)