See also discussion on image.sc.
import numpy as np
import numpy
import cupy as cp
import cupy
import pyclesperanto_prototype as cle
import timeit
cle.select_device("RTX")
<NVIDIA GeForce RTX 3050 Ti Laptop GPU on Platform: NVIDIA CUDA (1 refs)>
sliceimage = (np.random.random((17, 2439, 2439)) * 4).astype(int)
def relabel_numpy(sliceimage):
return numpy.take(numpy.array([0, 3, 3, 6, 4], numpy.uint8), sliceimage)
def relabel_cupy(sliceimage):
return cupy.asnumpy(
cupy.take(
cupy.asarray([0, 3, 3, 6, 4]),
cupy.asarray(sliceimage)
)
)
def relabel_cle(sliceimage):
return cle.replace_intensities(sliceimage, np.asarray([0, 3, 3, 6, 4]))
%timeit relabel_cupy(sliceimage)
292 ms ± 24.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit relabel_numpy(sliceimage)
793 ms ± 12.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit relabel_cle(sliceimage)
264 ms ± 5.14 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)