栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用大型Numpy阵列的技术?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用大型Numpy阵列的技术?

我感到很痛苦…您有时最终会在数组值中存储几倍的大小,然后将其丢弃。一次处理数组中的一项时,这无关紧要,但是在向量化时可能会杀死您。

我将使用工作示例进行说明。我最近使用numpy对此处描述的算法进行了编码。这是一种颜色映射算法,它获取RGB图像并将其转换为CMYK图像。对于每个像素重复此过程,如下所示:

  1. 使用每个RGB值的最高4位作为三维查找表的索引。这将确定LUT中多维数据集的8个顶点的CMYK值。
  2. 根据上一步的顶点值,使用每个RGB值的最低有效4位在该多维数据集中进行插值。最有效的方法是计算16个uint8数组,其大小为要处理图像的大小。对于24位RGB图像,相当于需要存储x6倍的图像来进行处理。

您可以执行以下几项操作:

1.分而治之

也许您不能单次处理1,000x1,000的数组。但是,如果您可以使用python循环遍历10个100x1,000的数组来完成此操作,那么它仍然可以远远超过1,000,000个项目的python迭代器!是的,它会比较慢,但是不会那么快。

2.缓存昂贵的计算

这与我上面的插值示例直接相关,尽管值得关注,但很难理解。因为我要在每个维度上具有4位的三维多维数据集上进行插值,所以只有16x16x16的可能结果,可以将结果存储在16个16x16x16字节的数组中。因此,我可以对其进行预计算并使用64KB的内存进行存储,然后针对整个图像逐一查找这些值,而不用为每个像素重做相同的操作而付出巨大的内存成本。对于小至64x64像素的图像,这已经是值得的,并且基本上可以处理像素数x
6倍的图像,而不必细分数组。

3.
dtypes
明智地使用

如果您的中间值可以放在一个中

uint8
,请不要使用
int32
s数组!由于无提示的溢出,这可能会变成神秘错误的噩梦,但是如果您小心一点,它可以节省大量资源。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号