Вы можете минимизировать распределение, передав «поддельный» массив:
ar = np.arange(6) / 3
np.modf(ar, ar, np.broadcast_arrays(ar.dtype.type(0), ar)[0])
Этот фиктивный массив имеет размер, равный одному double
, и modf
не будет выполнять внутреннее распределение.
РЕДАКТИРОВАТЬ В соответствии с предложениями @Eric и @hpaulj, более общее и долгосрочное решение будет
np.lib.stride_tricks._broadcast_to(np.empty(1, ar.dtype), ar.shape, False, False)