在2 numpy数组中查找类似列的索引

时间:2018-02-05 08:20:03

标签: python arrays numpy

我有两个大小为(12550,10)ar1 = [[1,2,3,4],[4,5,6,7],[1,3,4,5],[6,7,8,5]] ar2 = [[1,3],[4,6],[1,4],[6,8]] 的2d numpy数组。我需要找到与第二个数组列匹配的第一个数组的列索引集。

例如:

1,4,1,4

所以匹配的列是3,6,4,8 var index = 0; Facebookcontexts.forEach(function(value) { console.log(value.From); if (value.From == sender_psid) { FacebookContext.context = value.FacebookContext; console.log("Inside foreach "+JSON.stringify(FacebookContext.context)); contextIndex = index; } index = index + 1; });

我需要ar1中这些列的索引作为输出,即[0,2]

任何人都可以帮助我使用速度足够快的python代码,因为原始数组维度很大

1 个答案:

答案 0 :(得分:0)

检查出来:

ar1 = np.array([[1,2,3,4],[4,5,6,7],[1,3,4,5],[6,7,8,5]])
ar2 = np.array([[1,3],[4,6],[1,4],[6,8]])

np.where((ar1[:,None].T == ar2.T).all(axis=2))[0]

给出

array([0, 2], dtype=int64)

意味着ar2的第0列在ar1的第0列中找到,第2列的第1列在ar1的第2列中找到。

使用转置因为您关心的是列而不是行。 [:,None]用于广播(即每隔一列测试一次)。 all()检查整个列是否匹配。最后,[0]结果的np.where元素将为您提供ar1列索引。