gpt4 book ai didi

python - 当迭代高达 40,000 时,图像分析加速 "for-loop"

转载 作者:太空狗 更新时间:2023-10-29 17:58:35 26 4
gpt4 key购买 nike

这段代码的先决条件细节很长,所以我会尽量总结一下。 WB/RG/BYColor 是基本图像,FIDO 是应用于此基本图像的叠加层。 S_wb/rg/by 是最终的输出图像。 WB/RG/BYColor 与 FIDO 大小相同。

对于 FIDO 中的每个独特元素,我们想要计算基础图像中该区域的平均颜色。下面的代码执行此操作,但是由于 numFIDOs 非常大(最多 40,000),这需要很长时间

计算三个独立 RGB channel 的平均值。

sX=200
sY=200
S_wb = np.zeros((sX, sY))
S_rg = np.zeros((sX, sY))
S_by = np.zeros((sX, sY))
uniqueFIDOs, unique_counts = np.unique(FIDO, return_counts=True)
numFIDOs = uniqueFIDOs.shape
for i in np.arange(0,numFIDOs[0]):
Lookup = FIDO==uniqueFIDOs[i]
# Get average of color signals for this FIDO
S_wb[Lookup] = np.sum(WBColor[Lookup])/unique_counts[i]
S_rg[Lookup] = np.sum(RGColor[Lookup])/unique_counts[i]
S_by[Lookup] = np.sum(BYColor[Lookup])/unique_counts[i]

这需要大约 7.89 秒才能运行,不会太长,但是这将包含在另一个循环中,所以它会累积起来!

我尝试过矢量化(如下所示)但我做不到

FIDOsize = unique_counts[0:numFIDOs[0]:1]
Lookup = FIDO ==uniqueFIDOs[0:numFIDOs[0]:1]
S_wb[Lookup] = np.sum(WBColor[Lookup])/FIDOsize
S_rg[Lookup] = np.sum(RGColor[Lookup])/FIDOsize
S_by[Lookup] = np.sum(BYColor[Lookup])/FIDOsize

数组大小匹配错误

最佳答案

根据我的时间安排,这比您原来的方法快大约 10 倍。我用这些数组进行了测试:

import numpy as np

sX=200
sY=200

FIDO = np.random.randint(0, sX*sY, (sX, sY))
WBColor = np.random.randint(0, sX*sY, (sX, sY))
RGColor = np.random.randint(0, sX*sY, (sX, sY))
BYColor = np.random.randint(0, sX*sY, (sX, sY))

这是我计时的部分:

import collections

colors = {'wb': WBColor, 'rg': RGColor, 'by': BYColor}
planes = colors.keys()
S = {plane: np.zeros((sX, sY)) for plane in planes}

for plane in planes:
counts = collections.defaultdict(int)
sums = collections.defaultdict(int)
for (i, j), f in np.ndenumerate(FIDO):
counts[f] += 1
sums[f] += colors[plane][i, j]
for (i, j), f in np.ndenumerate(FIDO):
S[plane][i, j] = sums[f]/counts[f]

可能是因为尽管 Python 中的循环很慢,但它遍历的数据较少。

请注意,如果 FIDO 中有少量唯一值,原始版本会变得更快。对于大多数情况,这需要大致相同的时间。

关于python - 当迭代高达 40,000 时,图像分析加速 "for-loop",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com