python 数组[for in_python – 为多个数组实现numpy.in1d的最有效方法

实现一个函数的最佳方法是什么,该函数接受任意数量的1d数组并返回包含匹配值索引(如果有)的元组.

这是我想要做的一些伪代码:

a = np.array([1, 0, 4, 3, 2])

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

c = np.array([4, 2])

(ind_a, ind_b, ind_c) = return_equals(a, b, c)

# ind_a = [2, 4]

# ind_b = [1, 3]

# ind_c = [0, 1]

(ind_a, ind_b, ind_c) = return_equals(a, b, c, sorted_by=a)

# ind_a = [2, 4]

# ind_b = [3, 1]

# ind_c = [0, 1]

def return_equals(*args, sorted_by=None):

...

解决方法:

您可以将numpy.intersect1d与reduce一起使用:

def return_equals(*arrays):

matched = reduce(np.intersect1d, arrays)

return np.array([np.where(np.in1d(array, matched))[0] for array in arrays])

这里减少可能有点慢,因为我们在这里创建中间NumPy数组(对于大量输入它可能非常慢),如果我们使用Python的set及其.intersection()方法,我们可以阻止这种情况:

matched = np.array(list(set(arrays[0]).intersection(*arrays[1:])))

标签:python,arrays,sorting,indexing,numpy

来源: https://codeday.me/bug/20190519/1137625.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值