📌  相关文章
📜  如何在Python使用另一个数组屏蔽一个数组?

📅  最后修改于: 2022-05-13 01:55:38.047000             🧑  作者: Mango

如何在Python使用另一个数组屏蔽一个数组?

在本文中,我们将学习如何在Python使用另一个数组来屏蔽一个数组。在处理数据数组或数据帧时,屏蔽非常有用。掩码是一个数组,其中包含给定条件的布尔值列表。屏蔽数组是具有无效或缺失条目的数组。

使用数组掩码,我们可以轻松处理数组或数据集/数据帧中丢失、无效或不需要的条目。屏蔽对于布尔值列表是必不可少的,即 True 或 False 当应用于原始数组以返回感兴趣的元素时,此处 True 指的是满足给定条件的值,而 False 指的是不满足条件的值健康)状况。

我们可以使用以下函数使用另一个屏蔽数组:-

所需步骤

  • 导入库。
  • 创建一个屏蔽函数。
  • 可以通过以下两种方法进行掩蔽:-
    • 使用 masked_where()函数:将函数的两个数组作为参数传递,然后使用numpy.ma.masked_where()函数,其中传递屏蔽条件和要屏蔽的数组。在此,我们通过使用一个数组并针对该条件屏蔽另一个数组来给出屏蔽条件。
    • 使用 masked_where(), getmask() 和 masked_array()函数:将函数的两个数组作为参数传递,然后使用numpy.ma.masked_where()函数,其中传递掩码条件和要被掩码的数组在此我们是使用我们为其提供条件的相同数组和要屏蔽的数组并将结果存储在变量中,然后使用numpy.ma.getmask()函数,其中传递标记_where函数的结果并将其存储在变量中命名为“res_mask”。现在使用创建的掩码屏蔽另一个数组,为此,我们使用numpy.ma.masked_array()函数,其中传递要创建的数组和参数 mask='res_mask' 用于使用另一个数组创建数组并将其存储在一个变量被命名为'masked'。
  • 然后从函数返回掩码。
  • 现在创建主函数
  • 创建两个数组,一个用于屏蔽另一个。
  • 然后调用正如我们上面创建的函数,并在函数同时通过阵列作为参数,并把结果保存在一个变量让名为“掩盖”。
  • 现在为了将数组作为一维数组,我们使用numpy.ma.compressed()它将掩码作为参数传递。
  • 然后打印 Masked 数组。

示例 1:使用第二个数组屏蔽第一个数组

在上面的例子中,我们根据第一个数组 mod 7 的每个元素都为真的条件使用第二个数组屏蔽第一个数组,那些满足该索引元素条件的元素在第一个数组中被屏蔽。

由于我们有 array1 = [1,2,4,5,7,8,9] 和 array2 = [10,12,14,5,7,0,13],我们给了条件 array2%7 所以在array2 元素 14、7 和 0 满足条件,它们出现在索引 2,4 和 5 处,因此在 array1 元素中的相同索引处被屏蔽,因此我们得到了结果数组 [4 7 8]。



Python
# 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}')


Python
# 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}')


Python
# 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}')


Python
# 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}')


输出:

示例 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] 。

Python

# 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 是 array2 的掩码。

通过这种方式,我们可以使用另一个数组对一个数组进行屏蔽。

Python

# 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()创建第二个数组的掩码,其中 pass ar2 和 pass mask =res_mask 是 array1 的掩码。

通过这种方式,我们可以使用另一个数组对一个数组进行屏蔽。

Python

# 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}')

输出: