沿列查找 Array 1(多于一列)中大于 Array2(单列)中的值的值

Posted

技术标签:

【中文标题】沿列查找 Array 1(多于一列)中大于 Array2(单列)中的值的值【英文标题】:Find values in Array 1 (more than one column) that are greater than values in Array2 (Single column) along columns 【发布时间】:2018-09-13 00:28:01 【问题描述】:

假设我有一个形状为 (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 的元素(按元素)。想要的结果是

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 的方法?

【问题讨论】:

使用broadcasting : (array1 > array2[:,None]).astype(array1.dtype)? 谢谢。像魅力一样工作 【参考方案1】:

array2 重塑为具有(2,1) 形状的二维数组,然后由于numpy broadcasting,比较应该可以工作:

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

【讨论】:

有效。非常感谢

以上是关于沿列查找 Array 1(多于一列)中大于 Array2(单列)中的值的值的主要内容,如果未能解决你的问题,请参考以下文章

二维数组查找

一个R函数,它沿列查找多个对象

剑指offer--1.二维数组中的查找

剑指offer二维数组中的查找

PHP查找一列有序数组是否包含某值(二分查找)

查找有序二维数组中的元素