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

标签 python matlab numpy

我一直在绞尽脑汁寻找与此 older question 类似的解决方案.我一直在尝试找到一个复制索引结果的 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 相同。我执行此数据映射很多!我希望它能适用于各种数据类型,尤其是字符串和日期时间。似乎 numpy 的 in1d 让我走到了一半。我也对其他 Pythonic 想法持开放态度!

D(tf) = C(ix(tf))

谢谢!

最佳答案

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]

关于python - 在 NumPy 中复制 Matlab 的 ISMEMBER 函数的索引结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448554/

相关文章:

python - 用 Pandas 分组数据的堆积条形图

python - Postgres 和 Docker 在文件更改时重新部署

r - 约束最小二乘回归 - Matlab 或 R

algorithm - Elevation算法的MATLAB实现

python - 如何删除 % NAN 高于某个数字的 float 功能?

python - 如何理解 Python 中的 sys.stdout 和 sys.stderr

python - 如何 .pop() 二维列表上的特定项目?

arrays - 如何连接一个元胞数组(一个数组中有 15 个元胞,每个元胞大约为 1x7500)

python - 在python中,如何使用np数组高效地操作多维?

python - 如何[使用 Python] 创建 SIFT 的描述符数据库?