2017-09-26 15 views
-1

Ich habe ein kleines bisschen kompliziertes Problem. Ich habe zwei Array-Sets, lasst uns das erste Array possible_values aufrufen und das zweite Array als boundary aufrufen. Die erste Array-Form ist (n,) jeder Wert in der Anordnung ist ein list von möglichen Werten. Die zweite Array-Form ist (n, 2), wobei der Wert der Wert (min_value, max_value) ist.Vektorisierung findet Index des kleinsten Wertes von der Grenze

Was ich bekommen wollen, ist der kleinste Index von possible_values, die die Bedingungen von der Grenze zu erfüllen: Es muss als min_value größer sein, aber es muss max_value kleiner oder gleich sein. Dies ist ein Beispiel für mein Problem.

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

dies gibt mir führen:

array([2, 0, None]) 

aber dieser Code ist extrem langsam. Irgendeine bessere Empfehlung? Ich habe versucht, np.minimum.reduceat zu betrachten, aber ich bin mir nicht sicher, wie ich es in diesem Fall verwenden kann. Vielen Dank!

+0

Sie haben eine 'boundary' Array und ein' min_max' Array in Ihrem Beispiel, aber kein 'possible_values' Array. Ihr 'boundary' Array hat auch eine seltsame Form/dtype; nichts wie der Text zuvor suggeriert (stattdessen sieht das Array 'min_max' eher wie das vorgeschlagene Begrenzungsstil-Array aus, mit 'n = 3'). Bitte stellen Sie sicher, dass Ihr Beispielcode korrekt ist und funktioniert. – Evert

Antwort

-1

finde ich eine gute Lösung für dieses

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