现在,我的代码基本上看起来像:
for x in range(img.shape[0]):
for y in range(image.shape[1]):
output[x,y] = map[ input[x,y] ]
其中output
,input
和map
都是numpy数组(map的大小为256,均为uint8类型)。
这有效,但是很慢。这样的循环应该在C中。这就是numpy的作用。
是否有一个numpy函数(或cv2函数,无论如何我已经在导入该函数)?
答案 0 :(得分:3)
怎么样?
output = map[input]
答案 1 :(得分:0)
您正在寻找np.take
,它和map.take(input)
一样简单。这和Eelco的解决方案都比您的解决方案快得多。尽管您的行程可能会有所不同,但是这比Eelco的系统快70%,对于input.shape >> (1e4, 1e4)
,您将需要更好的解决方案。
一个开始的地方是[各种numpy花式索引方法的性能,也使用numba](Performance of various numpy fancy indexing methods, also with numba),其中详细介绍了此通用问题(即)的各种与性能相关的事实。我们使用一个 k 维数组以其他方式来索引其他一些 n 维数组。
如果您安装了Anaconda
之类的东西,则可以尝试使用Numba
到jit
np.ndarray.take(...)
来查看可以购买多少性能。上面的链接也对此进行了说明。