gpt4 book ai didi

python - Python中的迭代多维数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:25 24 4
gpt4 key购买 nike

我想使用滑动窗口计算图像上的一些操作(GLCM)。实现它的代码是:

import numpy as np
from skimage.feature import greycomatrix, greycoprops

from numpy.lib.stride_tricks import as_strided

image = np.arange(36).reshape((6,6))

window = 5

result = np.zeros(image.shape)
for i in xrange(window/2,image.shape[0]-window/2):
for j in xrange(window/2,image.shape[1]-window/2):
sample = image[i-(window/2):i+(window/2)+1, j - (window/2):j+(window/2)+1]
glcm = greycomatrix(sample, [1], [0], 256, symmetric=False, normed=True)
result[i,j] = greycoprops(glcm, 'contrast')[0, 0]

它可以工作,但是两个 for 循环非常昂贵。我想提高速度,因此,在网上环顾四周,我尝试使用 as_stride 技巧:

from numpy.lib.stride_tricks import as_strided

image = np.arange(36).reshape((6,6))

window = 5

y = as_strided(image,shape=(image.shape[0] - window + 1,\
image.shape[1] - window + 1,) +\
(window,window), strides=image.strides * 2)

例如,要计算第一个窗口的 GLCM:

glcm = greycoprops(greycomatrix(y[0,0], [1], [0], 256, symmetric=False, normed=True))[0][0]

我尝试将所有滑动窗口申请为:

glcm[:,:] = greycoprops(greycomatrix(y[:,:], [1], [0], 256, symmetric=False, normed=True))[0][0]

但在这种情况下,y[:,:]没有ndim==2y[0,0]但是ndim==4 , 所以 。我找不到一种方法以智能方式迭代所有保持 ndim == 2 的子集。 (greycomatrix 函数需要)。

编辑

我尝试使用 ravel 并处理一维向量,因此,只需 1 个 for 循环。这是代码:

a = y.ravel()
print a.shape
glcm=np.zeros(a.shape[0]/(window*window))
for i in np.arange(a.shape[0]/(window*window)):
glcm[i] = greycoprops(greycomatrix(a[i*25:i*25+25].reshape(5,5), [1], [0], 256, symmetric=False, normed=True))[0][0]

result= glcm.reshape(y.shape[0],y.shape[1])

处理时间增加...

最佳答案

既然你忘了真正问一个问题,我就假设它是

How do I make this run fast?

好吧,在这种情况下,严酷的事实是,尽管 python 会得到很好的结果,但与单个像素相比,进行大量切片的 python for 循环总是相对昂贵的操作。

因此,如果您关心速度,您应该使用允许获取 python 绑定(bind)的语言实现一些函数(例如,带有 cpython 的 C),并使用该函数。

关于python - Python中的迭代多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27980982/

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