首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么办法能让这个矮胖的操作更快吗?

有什么办法能让这个矮胖的操作更快吗?
EN

Stack Overflow用户
提问于 2014-08-05 23:01:45
回答 1查看 132关注 0票数 1

我正在尝试从API复制原始图像数据。数据是可迭代的,或者可以使用切片([:])。图像数据约为2000 x 2000 px。它是一个灰度浮点阵列,存储在一维。这就是我现在使用的:

imageData = np.fromiter(rawImageData, dtype=np.float32, count=width*height)

将数据复制到numpy数组大约需要2-3秒。是否有更快的方法来复制/塑造数据?

附加信息:,我以前尝试过使用np.asarray。它使它更快,但与线程冲突,如果尝试在主线程中执行任何操作,而操作是在一个单独的线程中完成的,那么程序就会崩溃。

EN

回答 1

Stack Overflow用户

发布于 2014-08-05 23:37:17

我正在测试一个用枕头打开的7200×4800的.bmp图像。

代码语言:javascript
复制
In [26]: %timeit np.array(im)
1 loops, best of 3: 222 ms per loop

In [27]: %timeit np.asarray(im)
10 loops, best of 3: 156 ms per loop

转换到float32需要一个副本,这需要一些时间,但可以节省内存:

代码语言:javascript
复制
In [39]: %timeit np.array(im, dtype=np.float32)
1 loops, best of 3: 444 ms per loop

In [40]: %timeit np.asarray(im, dtype=np.float32)
1 loops, best of 3: 543 ms per loop

fromiter需要一个一维数组,所以让我们只抓取R(我的图像是彩色的):

代码语言:javascript
复制
In [49]: %timeit np.fromiter(im.getdata(0), dtype=np.float32, count=7200*4800)
1 loops, best of 3: 2.49 s per loop

噢,还有2-3秒。原因是迭代器对于numpy来说是一个非常不透明的东西,它喜欢非常结构化的东西。因此,它必须马上推断出正在发生的事情,而且效率要低得多。所以,使用前两个函数中的一个,看看它们是否有效。

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

https://stackoverflow.com/questions/25149698

复制
相关文章

相似问题

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