Numpy多维数组的Where函数[重复]。

问题描述 投票:0回答:1

我有两个形状为(N1,2)和(N2,2)的数组。

import numpy as np
arr1 = np.array([[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]])
arr2 = np.array([[0, 2], [0, 3], [1, 2], [1, 2]])

我知道arr1中的每个元素都是唯一的。arr2中的元素不一定是唯一的,而且arr2中的每个元素在arr1中正好出现一次。

我想做的是,我想得到一个shape(N2,1)的指数数组,它只是给我提供arr2中的元素在arr1中的位置。所以在这种情况下,我希望输出的结果是

idxs = np.array([1, 2, 3, 3])

所以换句话说,我正在寻找一个类似于np.where的东西,它可以用于多维数组,但是np.where没有轴关键字。

我可以使用类似于

idxs = []
for element in arr2: 
    for i, other_element in enumerate(arr1):
        if (element == other_element).all():
            idxs.append(i)
            break   

但这是丑陋的,我打赌有一个整洁的numpy解决方案。

python python-3.x numpy
1个回答
1
投票

你可以使用 广播 中的每一行检查是否为会员。arr2, all 检查所有元素在哪一行中匹配,以及 argmax 以获得相应的指数。

((arr2[:,None] == arr1).all(2)).argmax(1)
# array([1, 2, 3, 3], dtype=int64)
© www.soinside.com 2019 - 2024. All rights reserved.