在python np.array中对连续值进行分组

时间:2015-05-01 13:04:01

标签: python arrays numpy grouping

我有一个数组(500 * 490)长的数据。它实际上来自雷达的原始数据。我打算创建一些跟踪,找到淋浴和放大器。雷暴,基于它们在阵列中的价值。值范围为0到75。

为了找到阵雨&基于阈值的雷暴,我已经从原始h5图像创建了一个数组,使用h5py来读取文件&然后用它创建一个数组。

import numpy as np
from numpy import inf
import pylab as pl
import math
import h5py
import scipy
import scipy.spatial

np.set_printoptions(threshold=10)

# read data
# *********
print "Reading & converting data data (mm/u - dbz)"
f = h5py.File('test.h5','r')
data = f.get('image1/image_data')
data_as_array = np.array(data)
datadbz = 20 * np.ma.log10(data_as_array)
print "*** Data read & converted"
print "raw array data = 'data_as_array'"
print "dbz array data = 'datadbz'"
print ""

# print raw data
# **************
print "Array from h5-file"
print "******************"
print data_as_array
print "*"
print ""

datadbz[datadbz == -inf] = 0
datadbz[datadbz == 96.32946777] = 0
datadbz[datadbz < 40] = 0

print "Array in dbz"
print "************"
print datadbz
print ""

# > 40 dbz
pixelarray = np.array(zip(*np.where(datadbz > 40)))
print "Array wich cores (> 40 dbz)"
print "***************************"
print pixelarray
print "*"
print ""

# > 55 dbz
hailarray = np.array(zip(*np.where(datadbz > 55)))
print "Array with cores (> 55 dbz)"
print "***************************"
print hailarray
print "*"
print ""

我需要使用的2个数组是数组&#34; pixelarray&#34;,它看起来像python shell中的以下片段

Array wich cores (> 40 dbz)
***************************
[[  5 106]
 [  5 107]
 [  6 105]
 ..., 
 [440 270]
 [440 271]
 [489 151]]
*

另一个是&#34; hailarray&#34;,在python shell中看起来像这样

Array with cores (> 55 dbz)
***************************
[[  7 104]
 [  8 103]
 [ 27 194]
 ..., 
 [433 272]
 [435 272]
 [438 271]]
*

我被困的地方是以下......

如果这是有问题的雷达图像:

radarimage

该数组包含杂乱,应该丢弃它。忽略。那些是小小的分裂&amp;图像上的点。然而,我需要的是风暴/淋浴。

为了做到这一点,我需要弄清楚如何区分杂波(随机点(数组中的值)与图像中的真实回波(数组中的数据范围)

由于我使用的数组看起来像这样,其中每个值的二进制代表一个x像素&amp; y检测像素

[[  5 106]
 [  5 107]
 [  6 105]
 ..., 
 [440 270]
 [440 271]
 [489 151]]
*

我在考虑将像素范围分组在一起。我知道有可能使用&#34;连续值&#34;在一个数组中并将它们组合在一起,但我还没有找到一种正确的方法,因为我的数组看起来更像是某种矩阵。

由于我不是python的专家,所以我希望能够指出正确的方向来解决这个问题。一旦我完成了这个,只有&#34;只有&#34;找到哪个群体的维度大于某个阈值的问题,这样我就可以摆脱那些乱七八糟的杂乱点。只是留下风暴本身。

然后,我可以将这些较大群体的中心用作暴风雨的中心。跟踪应该是完整的。

因此,如果有人可以帮助我设置搜索阵列中连续像素范围的搜索,我将永远感激,因为我无法帮助尝试在这里发明轮子的感觉。

1 个答案:

答案 0 :(得分:0)

如果你有足够的内存,你可以构建一个密集的图像表示,并使用数组在那里设置相应的像素。然后你可以在图像上使用侵蚀滤镜来消除噪音(如SciPy的binary_erosion