首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >np.unravel_index非常慢

np.unravel_index非常慢
EN

Stack Overflow用户
提问于 2020-10-20 18:58:50
回答 1查看 200关注 0票数 0

假设我有一幅分辨率为HxWx3的图像,而我有一份被降采样到分辨率H‘x’x3 (resized_img)的图像。现在,假设我想在图像中找到最大值索引,这样做的一种方法是

代码语言:javascript
运行
复制
ind=np.unravel_index(np.argmax(img,axis=None),img.shape)

但是,如果分辨率更大,则这种方法是缓慢的。另一方面,我可以在调整大小的img上找到最大索引。

代码语言:javascript
运行
复制
img_resized=np.unravel(np.argmax(resized_img,axis=None),resized_img.shape)

现在,如果我想要在原始图像中对应的索引,我只是乘以一个比例因子,或者我如何做到这一点?

如果H=W和H‘’=W‘那么我可以相信我所要做的就是让

代码语言:javascript
运行
复制
scale_factor=H/H'=W/W'

代码语言:javascript
运行
复制
ind=resized_ind * scale_factor

但我不确定这是否正确,以及如何处理$H \neq $时的情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 20:46:13

ravel/unravel不改变数组;它们只是根据形状计算新的索引。

考虑一个简单的3d数组:

代码语言:javascript
运行
复制
In [63]: arr = np.arange(24).reshape(2,3,4)
In [64]: arr
Out[64]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

该数组中包含一个索引元组的点:

代码语言:javascript
运行
复制
In [65]: arr[0,1,2]
Out[65]: 6

狂暴与毁灭:

代码语言:javascript
运行
复制
In [66]: np.ravel_multi_index([0,1,2],arr.shape)
Out[66]: 6
In [67]: np.unravel_index(6, arr.shape)
Out[67]: (0, 1, 2)

有一个ravel方法,但它只是一个reshape,因此是一个view (至少在order等方面没有变化):

代码语言:javascript
运行
复制
In [69]: arr.ravel()
Out[69]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

ravel_multi_index的计算只是:

代码语言:javascript
运行
复制
In [70]: 2 + 4*1 + 12*0
Out[70]: 6

unravel则是相反的。我不会进入细节,但它可能使用某种模数。

另一种方法是比较两种不同形状的运行时间:

代码语言:javascript
运行
复制
In [71]: np.unravel_index(1000, (1080,1620,3))
Out[71]: (0, 333, 1)
In [72]: np.unravel_index(1000, (256,256,3))
Out[72]: (1, 77, 1)
In [73]: timeit np.unravel_index(1000, (1080,1620,3))
5.14 µs ± 128 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [74]: timeit np.unravel_index(1000, (256,256,3))
4.84 µs ± 29.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

这两个形状的运行时间大致相同(它们在±因子内重叠)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64451694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档