wandelt eine skalare Funktion bequem in vektorisierte Funktionen um, die direkt auf Arrays angewendet werden können. Bei der Eingabe eines einzelnen Werts in die vektorisierte Funktion ist der Ausgang jedoch ein 0-dimentisches Array anstelle des entsprechenden Werttyps, der bei der Verwendung des Ergebniss an anderer Stelle aufgrund von Tippproblemen Fehler verursachen kann. Meine Frage ist: Gibt es einen Mechanismus in Numpy , der dieses
Problem durch automatisch konvertieren, indem der Rückgabewert des 0-dimensionalen Arrays in den entsprechenden Datentyp umgewandelt wird? D Geben Sie ein Beispiel: < /p>
Code: Select all
@np.vectorize ( excluded = ( 1, 2 ) )
def rescale (
value: float,
srcRange: tuple [ float, float ],
dstRange: tuple [ float, float ] = ( 0, 1 ),
) -> float:
srcMin, srcMax = srcRange
dstMin, dstMax = dstRange
t = ( value - srcMin ) / ( srcMax - srcMin )
return dstMin + t * ( dstMax - dstMin )
Bei Aufrufen der obigen Funktion mit der Rescaly (5, (0, 10)) ist der Rückgabewert numpy.Array (0,5) anstelle des Werts nur der Wert 0.5 .
Ich werde dieses
Problem derzeit durch einen selbstdefinierten Dekorator auflösen:
Code: Select all
def vectorize0dFix ( func ):
def _func ( *args, **kwargs ):
result = func ( *args, **kwargs )
if isinstance ( result, np.ndarray ) and result.shape == ( ):
return result.item ( )
else:
return result
return _func
Aber wenn dieses
Problem Probleme verursacht, sollte es einen Mechanismus in Numpy geben, der das
Problem ordnungsgemäß befasst. Ich frage mich, ob es einen gibt oder warum es nicht gibt.