Numpy boolean masking - multidimension和floats

时间:2017-11-15 20:18:42

标签: python numpy

我有一个巨大的4维数组,但是对于这个例子,我将使用3-dimenisonal数组,x

数组的类型为float。

我试图使用布尔掩码来定位特定数字,然后将这些数字更改为另一个数字。

然而,似乎我无法找到一些浮点数,尽管它们是一个 我的数组中的元素' x'

x是32,32,3数组

以下是我的x数组的一部分:

>>> x

array([[[ -71.71074,  -74.05614,  -69.5538 ],
        [ -87.14036,  -89.44238,  -86.85358],
        [ -81.05044,  -88.24616,  -89.58144],
        ..., 
        [  26.94098,   -4.307  ,  -24.44078],
        [  21.60692,  -10.70848,  -30.00036],
        [  17.826  ,  -11.4736 ,  -28.89246]],

       [[-114.0993 , -115.29484, -111.36412],
        [-129.3446 , -134.45914, -130.4656 ],
        [-112.2169 , -127.1767 , -131.10234],
        ..., 
        [  -7.04254,  -47.13862,  -75.90018],
        [ -10.33038,  -51.55898,  -80.49918],
        [  -7.1568 ,  -47.38368,  -73.45104]],

       [[-104.72472, -110.64818, -109.2514 ],
        [-112.71662, -126.49748, -129.01922],
        [ -80.47348, -107.05546, -121.47586],
        ..., 
        [ -11.21066,  -49.95824,  -79.29398],
        [  -8.59094,  -49.54152,  -79.06528],
        [ -19.59134,  -60.55772,  -87.22356]],

       ..., 
       [[  81.44628,   44.0467 ,  -18.1421 ],
        [  76.41156,   29.2665 ,  -77.77894],
        [  74.07492,   38.1989 ,  -84.73544],
        ..., 
        [  35.75964,    9.99658,  -40.87088],
        [ -68.68902,  -92.7463 , -104.75116],
        [ -72.51674,  -90.86008,  -93.10554]],

       [[  52.9319 ,   12.62384,  -18.64896],
        [  47.53098,   -1.58318,  -70.6934 ],
        [  60.71512,   19.8131 ,  -82.16812],
        ..., 
        [  58.50748,   23.66242,  -18.25642],
        [ -28.58606,  -62.64844,  -78.71842],
        [ -42.9967 ,  -72.2858 ,  -79.60626]],

       [[  49.26526,   17.05222,    0.55436],
        [  41.40204,    3.34674,  -19.9712 ],
        [  52.13484,   16.24322,  -26.9406 ],
        ..., 
        [  89.22164,   58.30292,   26.16942],
        [  24.43504,   -7.61742,  -29.90624],
        [  -3.63908,  -33.8503 ,  -42.38186]]])

所以我在这个数组中选择数字,看看我是否可以使用布尔掩码找到它们。但是,只找到了一些数字:

这位于元素:

>>> x[x==60.71512]
array([ 60.71512])

然而,这并没有找到元素

>>> x[x==-28.58606]
array([], dtype=float64)

#empty array result despite being an element within my array

我对此行为感到困惑。

我的最终目标是在我的4维数组中找到所有0个元素 转换它们.1。

y是我的4维数组(保留图像)

我假设y[y==0] = .1会起作用,但现在做上面的奇怪行为, 我不确定我得到的空数组是由于上面的行为还是由于我的数组中实际上没有零。

另外,既然我正在处理花车,那应该是y[y==0.00]吗?

1 个答案:

答案 0 :(得分:1)

如果你的字面意思是完全0,那么是的,你可以按照你在问题中建议的那样做。请注意,在为multi-dimensional arrays测试这些操作时,有时可以通过使用1d arrays来简化操作:

>>> a = np.array([1, 2, 4, 0, 1, 0, 7, 0], dtype="float32")
>>> a[a==0] = 1
>>> a
array([ 1.,  2.,  4.,  1.,  1.,  1.,  7.,  1.], dtype=float32)

正如@Divikar首次提到的那样,您可以使用np.isclose来消除由floats引起的错误。