如何在Python中使用另一个数组来掩盖一个数组
在这篇文章中,我们将学习如何在Python中使用另一个数组来屏蔽一个数组。在处理数据数组或数据框架时,掩码可能非常有用。掩码是一个包含给定条件的布尔值列表的数组。被屏蔽的数组是有无效或缺失条目的数组。
使用数组的屏蔽,我们可以很容易地处理数组或数据集/数据帧中的缺失、无效或不需要的条目。屏蔽的基本原理是使用布尔值列表,即True或False,当应用于原始数组时,返回感兴趣的元素,这里True指的是满足给定条件的值,而False指的是不满足该条件的值。
我们可以通过使用以下函数,用另一种方式来掩盖数组:-
numpy.ma.masked_where(condition, arr)
numpy.ma.getmask(arr)
numpy.ma.masked_array(arr, mask=)
其中,
condition:掩盖的条件
arr: 被掩盖的数组
mask:被掩码数组的结果
需要的步骤
- 导入library。
- 创建一个用于屏蔽的函数。
- 遮蔽可以通过以下两种方法完成:
- 使用masked_where()函数。在函数中传递两个数组作为参数,然后使用numpy.ma.masked_where()函数,其中传递屏蔽的条件和要屏蔽的数组。在这里,我们通过使用一个数组给出屏蔽的条件,并为该条件屏蔽另一个数组。
- 使用 masked_where(), getmask()和 masked_array()函数。在函数中传递两个数组作为参数,然后使用numpy.ma.masked_where()函数,在该函数中传递掩蔽条件和要掩蔽的数组,在此我们使用相同的数组,为其提供制作条件和要掩蔽的数组,并将结果存储在变量中,然后使用numpy.ma.getmask()函数,其中传递mark_where函数的结果并将其存储在名为 “res_mask “的变量。现在使用创建的掩码掩盖另一个数组,为此,我们使用numpy.ma.masked_array()函数,其中传递要创建的数组和参数mask=’res_mask’,使用另一个数组创建数组,并将其存储在一个变量中,命名为’masked’。
- 然后从函数中返回被屏蔽的。
- 现在创建主函数
- 创建两个数组,一个用于掩盖另一个。
- 然后调用我们在上面创建的函数,并将函数中的两个数组作为参数传递,将结果存储在一个名为 “masked “的变量中。
- 现在为了将数组作为一个1-d数组,我们使用numpy.ma.compressed(),它将掩码作为一个参数传递。
- 然后打印Masked 数组。
例子1:用第一阵列进行屏蔽
在上面的例子中,我们是根据第一个数组mod 7的每个元素为真的条件,用第二个数组来掩盖第一个数组,那些在该索引元素处满足条件的元素在第一个数组中被掩盖。
由于我们有数组1=[1,2,4,5,7,8,9]和数组2=[10,12,14,5,7,0,13],我们已经给出了条件array2%7,所以在数组2中,元素14,7和0满足条件,它们出现在索引2,4和5,所以在数组1的相同索引的元素被屏蔽了,所以结果数组有[4 7 8]。
# importing the library
import numpy as np
# function to create masked array
def masking(ar1, ar2):
# masking the array1 by using array2
# where array2 mod 7 is true
mask = np.ma.masked_where(ar2%7,ar1)
return mask
# main function
if __name__ == '__main__':
# creating two arrays
x = np.array([1,2,4,5,7,8,9])
y = np.array([10,12,14,5,7,0,13])
# calling masking function to get
# masked array
masked = masking(x,y)
# getting the values as 1-d array which
# are non masked
masked_array = np.ma.compressed(mask)
# printing the resultant array after masking
print(f'Masked Array is:{masked_array}')
输出:
例子2:用第一个数组掩盖第二个数组。
在上面的例子中,我们是用第一个数组来屏蔽第二个数组,给出条件array1<5意味着array1中小于5的元素满足条件,该元素的索引将被屏蔽在第二个数组中。
因为我们有array1 = [1,2,4,5,7,8,9]和array2 = [10,12,14,5,7,0,13],所以在array1中,元素1,2和4小于5,这些元素存在于索引0,1和2,所以这个元素满足条件,所以在array2中存在于相同索引的元素被屏蔽了,我们使用numpy.ma.compressed()函数,这个函数返回非屏蔽数值。因此,我们在屏蔽后有[5 7 0 10]。
# importing the library
import numpy as np
# function to create masked array
def masking(ar1, ar2):
# masking the array2 by using array1
# where condition array1 is less than
# 5 is true
mask = np.ma.masked_where(ar1 < 5, ar2)
return mask
# main function
if __name__ == '__main__':
# creating two arrays
x = np.array([1, 2, 4, 5, 7, 8, 9])
y = np.array([10, 12, 14, 5, 7, 0, 13])
# calling masking function to get
# masked array
masked = masking(x, y)
# getting the values as 1-d array which
# are non masked
masked_array = np.ma.compressed(mask)
# printing the resultant array after masking
print(f'Masked Array is:{masked_array}')
输出:
例子3:通过getmask()函数用第二个数组屏蔽第一个数组。
在上面的例子中,为了使用第二个数组制作第一个数组的掩码,首先我们通过给ar2提供条件ar2%3来创建第二个数组的掩码。然后我们使用numpy.ma.getmask()函数,将创建的掩码结果传给该函数,然后我们使用numpy.ma.masked array()创建第一个数组的掩码,其中传给ar1并传给掩码=res_mask,这是数组2的掩码。
通过这种方式,我们可以用另一个数组对一个数组进行屏蔽。
# importing the library
import numpy as np
# function to create masked array
def masking(ar1, ar2):
# creating the mask of array2 where
# condition array2 mod 3 is true
mask = np.ma.masked_where(ar2 % 3, ar2)
# getting the mask of the array
res_mask = np.ma.getmask(mask)
# masking the array1 with the result
# of mask of array2
masked = np.ma.masked_array(ar1, mask=res_mask)
return masked
# main function
if __name__ == '__main__':
# creating two arrays
x = np.array([1, 2, 4, 5, 7, 8, 9])
y = np.array([10, 12, 14, 5, 7, 0, 12])
# calling masking function to get masked
# array
masked = masking(x, y)
masked_array = np.ma.compressed(masked)
# printing the resultant array after masking
print(f'Masked Array is:{masked_array}')
输出:
例子4:通过getmask()函数用第一个数组屏蔽第二个数组。
在上面的例子中,为了使用第一个数组制作第二个数组的掩码,首先我们通过给ar1设定条件ar1<4来创建第一个数组的掩码。然后我们使用numpy.ma.getmask()函数,将创建的掩码结果传给该函数,然后我们使用numpy.ma.masked_array()创建第二个数组的掩码,其中传给ar2并传给掩码=res_mask,这是数组1的掩码。
通过这种方式,我们可以用另一个数组对一个数组进行屏蔽。
# importing the library
import numpy as np
# function to create masked array
def masking(ar1, ar2):
# creating the mask of array2 where
# condition array2 mod 3 is true
mask = np.ma.masked_where(ar2 % 3, ar2)
# getting the mask of the array
res_mask = np.ma.getmask(mask)
# masking the array1 with the result of
# mask of array2
masked = np.ma.masked_array(ar1, mask=res_mask)
return masked
# main function
if __name__ == '__main__':
# creating two arrays
x = np.array([1, 2, 4, 5, 7, 8, 9])
y = np.array([10, 12, 14, 5, 7, 0, 12])
# calling masking function to get
# masked array
masked = masking(x, y)
masked_array = np.ma.compressed(masked)
# printing the resultant array after masking
print(f'Masked Array is:{masked_array}')
输出: