在NumPy中复制Matlab的ISMEMBER函数的索引结果?

2024-09-28 20:15:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在绞尽脑汁想办法解决这个问题。我一直在尝试寻找一个Python代码模式来复制索引结果。例如:

A = [3;4;4;3;6]
B = [2;5;2;6;3;2;2;5]
[tf ix] = ismember(A,B)
>> A(tf)

ans =

     3
     3
     6
>> B(ix(tf))

ans =

     3
     3
     6

这允许我做的是,如果有一个数组C的顺序与B相同,我现在可以适当地将C的值插入一个新的数组D中,这个数组的排序方式与a相同。我经常做这种数据映射!我希望它能适用于各种数据类型,比如字符串和日期时间。看来纽比已经到了一半了。我也对其他Python的想法持开放态度!在

^{pr2}$

谢谢你!在


Tags: 数据字符串代码排序顺序tf方式时间
1条回答
网友
1楼 · 发布于 2024-09-28 20:15:48
import numpy as np

A = np.array([3,4,4,3,6])
B = np.array([2,5,2,6,3,6,2,2,5])

def ismember(a, b):
    # tf = np.in1d(a,b) # for newer versions of numpy
    tf = np.array([i in b for i in a])
    u = np.unique(a[tf])
    index = np.array([(np.where(b == i))[0][-1] if t else 0 for i,t in zip(a,tf)])
    return tf, index

tf,ix=ismember(A,B)
print(tf)
# [ True False False  True  True]
print(ix)
# [4 0 0 4 5]
print(A[tf])
# [3 3 6]
print(B[ix[tf]])
# [3 3 6]

相关问题 更多 >