从两个 2d np.arrays element-wise 创建 argmax 的新 2d 数组

Create new 2d array of the argmax from two 2d np.arrays element-wise

假设我有两个二维 numpy 数组,X 和 Y,其中

    X = np.array([[0,1,2,3],
                  [4,5,6,7]]) 
    Y = np.array([[1,2,3,4],
                  [1,1,7,3]])

我想创建一个新的 2d numpy 数组 Z,它是 X、Y 元素的 argmax,所以 Z 将是,在这个例子中:

    Z = np.array([[1,2,3,4],
                  [4,5,7,7]])

我尝试了以下变体 none return 预期结果

    np.array([(np.argmax(X,Y))]) --> error

我知道我可以通过使用嵌套的 for 循环来简单地做到这一点,但是对于非常大的数据集来说这不是很有效。是否有一种有效的、特定于 numpy 的方法来创建一个新的二维数组(上例中的 Z),由两个二维数组(上例中的 X 和 Y)的 argmax 元素组成?

使用numpy.where:

Z = np.where(X > Y, X, Y)

这里,第一个参数X > Y逐个元素比较XY,returns比较的布尔数组。然后我们使用布尔数组构建 Z:如果索引处的元素是 True,它使用来自 X 的值,如果它是 False,它使用来自 Y.

的值

您正在寻找 np.maximum:

>>> np.maximum(X, Y)

array([[1, 2, 3, 4],
       [4, 5, 7, 7]])

逐元素比较数组,returns每个元素的最大值。