Python Numpy布尔掩蔽——多维和浮点
我有一个巨大的四维数组,但在这个例子中,我将使用一个三维数组,Python Numpy布尔掩蔽——多维和浮点,python,numpy,Python,Numpy,我有一个巨大的四维数组,但在这个例子中,我将使用一个三维数组,x 数组的类型为float 我尝试使用布尔掩蔽来定位特定的数字,然后将这些数字更改为另一个数字 然而,似乎我找不到一些浮点数,尽管它们是一个数字 数组“x”中的元素 x是一个32,32,3数组 下面是我的x数组的一部分的外观: >>> x array([[[ -71.71074, -74.05614, -69.5538 ], [ -87.14036, -89.44238, -86.85358
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
我被这种行为弄糊涂了
我的最终目标是在我的四维数组和
转换它们
y
是我的四维数组(保存图像)
我假设y[y==0]=.1
可以工作,但是现在做上面的奇怪行为,
我不确定我得到的空数组是由于上面的行为还是因为我的数组中实际上没有零
另外,由于我处理的是浮点数,它应该是
y[y==0.00]
?如果你的字面意思是精确值0
的元素,那么是的,你可以按照问题中的建议去做。请注意,当测试多维数组的这些操作时,有时可以通过使用1d
数组来帮助简化:
>>> 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)
正如第一次提到的,您可以使用来消除由浮动引起的错误尝试np.isclose()
。此数组中似乎没有任何0
元素。您的意思是否与0.00000..
或0首次使用np.set\printoptions(17)中的0
元素完全相同
要查看所有的小数…请使用np.isclose
mentionned@B.M.是的,np.isclose解决了浮动问题。谢谢you@Divakar是的,np.isclose解决了浮点问题。谢谢。是的,我的意思是零(为了避免零除法问题)谢谢。嗨,乔,很抱歉。请把迪瓦卡的部分包括在内,他回答了我问题的另一部分。