Python 如何从2d numpy数组高效地生成0和1的屏蔽数组?
如果我有一个给定的2d numpy数组,如何根据该数组的值超过给定阈值的位置,使用0和1有效地制作该数组的掩码 到目前为止,我制作了一个工作代码,可以这样做:Python 如何从2d numpy数组高效地生成0和1的屏蔽数组?,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,如果我有一个给定的2d numpy数组,如何根据该数组的值超过给定阈值的位置,使用0和1有效地制作该数组的掩码 到目前为止,我制作了一个工作代码,可以这样做: import numpy as np def maskedarray(data, threshold): #creating an array of zeros: zeros = np.zeros((np.shape(data)[0], np.shape(data)[1])) #going over each
import numpy as np
def maskedarray(data, threshold):
#creating an array of zeros:
zeros = np.zeros((np.shape(data)[0], np.shape(data)[1]))
#going over each index of the data
for i in range(np.shape(data)[0]):
for j in range(np.shape(data)[1]):
if data[i][j] > threshold:
zeros[i][j] = 1
return(zeros)
#creating a test array
test = np.random.rand(5,5)
#using the function above defined
mask = maskedarray(test,0.5)
我拒绝相信没有一种更聪明的方法不需要使用两个嵌套的FOR循环
谢谢最快的方法就是:
def masked_array(data, threshold):
return (data > threshold).astype(int)
例如:
data = np.random.random((5,5))
threshold = 0.5
>>> data
array([[0.42966975, 0.94785801, 0.31750045, 0.75944551, 0.05430315],
[0.91475934, 0.65683185, 0.09019139, 0.85717157, 0.63074349],
[0.33160746, 0.82455941, 0.50801804, 0.81087228, 0.01561161],
[0.6932717 , 0.12741425, 0.17863726, 0.36682108, 0.95817187],
[0.88320599, 0.51243802, 0.90219452, 0.78954102, 0.96708252]])
>>> masked_array(data, threshold)
array([[0, 1, 0, 1, 0],
[1, 1, 0, 1, 1],
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 1]])
numpy.where(condition).astype(np.bool)
对不起,我的意思是np.int
。这个方法也可以用于在值之间进行过滤吗?就像我们希望在您的示例中筛选0.3到0.5之间的值一样?是的:((数据>0.3)和(数据<0.5))。astype(int)
创建掩码,并数据[掩码]
对其进行筛选