gpt4 book ai didi

Python:查找二维数组中元素半径内点的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:39 26 4
gpt4 key购买 nike

我正在寻找一种有效的方法来查找 2D NumPy 数组中元素的特定半径值的平均值,不包括中心点和值 < 0。

我当前的方法是创建一个圆盘形掩模(使用方法 here )并找到该掩模内点的平均值。然而,这花费的时间太长了……在我的 300x300 数组中计算大约 18000 个点需要超过 10 分钟。

我想要查找的数组的标题为“arr”

def radMask(index,radius,array,insert):
a,b = index
nx,ny = array.shape
y,x = np.ogrid[-a:nx-a,-b:ny-b]
mask = x*x + y*y <= radius*radius
array[mask] = insert

return array

arr_mask = np.zeros_like(arr).astype(int)
arr_mask = radMask(center, radius, arr_mask, 1)
arr_mask[arr < 0] = 0 #Exclude points with no echo
arr_mask[ind] = 0 #Exclude center point

arr_mean = 0
if np.any(dbz_bg):
arr_mean = sp.mean(arr[arr_mask])

有没有更有效的方法来做到这一点?我研究了一些图像处理过滤器/工具,但无法完全理解它。

最佳答案

这有帮助吗?在我的笔记本电脑上只需几秒钟即可获得约 18000 点:

import numpy as np

#generate a random 300x300 matrix for testing
inputMat = np.random.random((300,300))
radius=50

def radMask(index,radius,array):
a,b = index
nx,ny = array.shape
y,x = np.ogrid[-a:nx-a,-b:ny-b]
mask = x*x + y*y <= radius*radius

return mask


#meanAll is going to store ~18000 points
meanAll=np.zeros((130,130))

for x in range(130):
for y in range(130):
centerMask=(x,y)
mask=radMask(centerMask,radius,inputMat)
#un-mask center and values below 0
mask[centerMask]=False
mask[inputMat<0]=False

#get the mean
meanAll[x,y]=np.mean(inputMat[mask])

关于Python:查找二维数组中元素半径内点的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025644/

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