在Array 1(多个列)中查找大于Array2(单列)中列值的值

时间:2018-04-03 15:43:40

标签: numpy

假设我有一个形状(2,4)的numpy ndarray如下

>>> array1 = numpy.random.rand(2,4)

array([[ 0.87791012,  0.84566058,  0.73877908,  0.40377929],
       [ 0.9669688 ,  0.15913901,  0.70374509,  0.95776427]])

我有第二个形状数组(2,)如下

>>> array2 = numpy.random.rand(2)

array([ 0.57126204,  0.67938752])

我想比较列维度上的两个数组,以找到array1中大于array2(elementwise)的元素。期望的结果是

array([[ 1.,  1.,  1.,  0.],
       [ 1.,  0.,  1.,  1.]])

如果两者具有相同的尺寸,我可以直接使用(array1 > array2).astype(int)。如果array1是一个包含多个列的多维数组,我使用以下方法涉及一个循环

results = np.zeros_like(array1)

for each in range(array1.shape[1]):
    results[:,each] = array1[:,each] > array2

有更多的pythonic / numpy方式吗?

1 个答案:

答案 0 :(得分:1)

array2重塑为形状为(2,1)的二维数组,然后由numpy broadcasting进行比较:

(array1 > array2[:,None]).astype(int)
#array([[1, 1, 1, 0],
#       [1, 0, 1, 1]])