【发布时间】:2019-05-18 00:51:00
【问题描述】:
我有一个代表 RGB 图像的 ndarray,形状为 (width,height,3),我希望将每个值替换为它自身的某个函数、它的位置和它所属的颜色通道的结果。在三个嵌套的 for 循环中这样做非常慢,有没有办法将其表示为原生数组操作?
编辑:寻找一个就地解决方案 - 一个不涉及创建另一个 O(width x height) ndarray 的解决方案(除非 numpy 有一些魔法可以防止这样的 ndarray 实际被分配)
【问题讨论】:
-
取决于您要应用的具体功能。你能说得更具体点吗?
-
很多函数可以直接应用在数组上。您还可以使用
np.indices(your_array.shape)来获取图像的索引值。你想应用什么功能? -
理想情况下,我想应用任何可调用 python 的结果,但假设我想将每个通道乘以一个(不同的)常数乘以它与中心的(标准化)距离。
-
如果您的函数一次只能处理一个元素(在宽度/高度空间中),则需要某种 Python 级别的迭代。大多数快速编译的
numpy操作在数学上都是简单的(例如乘法),它们采用整个数组并返回一个新数组。只要您的问题仍然笼统,答案就会笼统。 -
您为什么担心分配新的(或临时的)数组?你认为这会使计算更快吗?我感觉您需要更多的基本
numpy计算经验,更好地了解快慢方式。
标签: python numpy numpy-ndarray