Python 嵌套for循环的矢量化
我需要矢量化两个嵌套的for循环,但不知道怎么做。一个用于灰度图像,一个用于彩色图像。我想用kuwahara过滤器过滤图像。下面的代码是我需要矢量化以获得快速函数的最后一步Python 嵌套for循环的矢量化,python,for-loop,vectorization,Python,For Loop,Vectorization,我需要矢量化两个嵌套的for循环,但不知道怎么做。一个用于灰度图像,一个用于彩色图像。我想用kuwahara过滤器过滤图像。下面的代码是我需要矢量化以获得快速函数的最后一步 阵列img_kuwahara的形状为mxn或mxnx3(彩色图像) 数组索引_min的形状为mxn 阵列平均值的形状为4xmxn(灰度)或3xmxn(颜色) 我需要从mean数组中得到正确的值,然后放入img_kuwahara数组 作为示例数据,您可以使用以下数组: 索引\u min=np.数组([[0,1,1,2,3]
- 阵列img_kuwahara的形状为mxn或mxnx3(彩色图像)
- 数组索引_min的形状为mxn
- 阵列平均值的形状为4xmxn(灰度)或3xmxn(颜色)
# Edit gray scale image
if len(image.shape) == 2:
# Set result image
img_kuwahara = np.zeros((row, columns), dtype=imgtyp)
for k in range(0, row):
for i in range(0, columns):
img_kuwahara[k, i] = mean[index_min[k, i], k, i]
# Edit color image
if len(image.shape) == 3:
# Set result image
img_kuwahara = np.zeros((row, columns, 3), dtype=imgtyp)
for k in range(0, row):
for i in range(0, columns):
img_kuwahara[k, i, 0] = mean[0][index_min[k, i], k, i]
img_kuwahara[k, i, 1] = mean[1][index_min[k, i], k, i]
img_kuwahara[k, i, 2] = mean[2][index_min[k, i], k, i]
第一个循环可以使用以下方法进行矢量化: 第二个循环可以通过使用附加的(假设
mean
在这种情况下实际上是一个4D数组,而不是一个3D数组列表;否则只需转换它):
除了np.meshgrid
之外,您还可以使用(支持更自然的语法):
你有一些可以发布的样本数据吗?
j, i = np.meshgrid(range(columns), range(rows))
img_kuwahara = mean[index_min[i, j], i, j]
j, i = np.meshgrid(range(columns), range(rows))
img_kuwahara = np.moveaxis(mean, 0, -1)[index_min[i, j], i, j]
i, j = np.mgrid[:rows, :columns]