Удобно преобразует скалярную функцию в векторизованные функции, которые могут быть применены непосредственно к массивам. Однако при введении одного значения в векторизованную функцию выходной сигнал представляет собой 0-диментный массив вместо соответствующего типа значения, который может вызвать ошибки при использовании результата в других местах из-за проблем ввода. Мой вопрос: существует ли механизм в Numpy , который может решить эту проблему, автоматически преобразуя возвращаемое значение 0-мерного массива в соответствующий тип данных?
Для объяснения i ' D Приведите пример: < /p>
Код: Выделить всё
@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 )
при вызове функции выше с помощью Rescale (5, (0, 10)) возвращаемое значение numpy.array (0.5) вместо просто значения 0.5 .
В настоящее время я режу эту проблему с помощью самоопределенного декоратора:
Код: Выделить всё
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
Но если эта проблема вызывает неприятности, в Numpy должен быть механизм, который правильно касается проблемы. Интересно, есть ли он или почему нет.
Подробнее здесь:
https://stackoverflow.com/questions/794 ... -vectorize