Numpy 用对应于另一个数组的索引替换值

Numpy 用对应于另一个数组的索引替换值,numpy,Numpy,我是numpy的新手。我有一个大小为[x,]的数组A和一个大小为[y,](y>x)的数组B。结果,我想要一个大小为[x,]的数组C,其中填充了索引B 以下是输入和输出的示例: >>> A = [10, 20, 30, 10, 40, 50, 10, 50, 20] >>> B = [10, 20, 30, 40, 50] >>> C = #Some operations >>> C [0, 1, 2, 0, 3,

我是numpy的新手。我有一个大小为[x,]的数组A和一个大小为[y,](y>x)的数组B。结果,我想要一个大小为[x,]的数组C,其中填充了索引B

以下是输入和输出的示例:

>>> A = [10, 20, 30, 10, 40, 50, 10, 50, 20]
>>> B = [10, 20, 30, 40, 50]
>>> C = #Some operations
>>> C
[0,  1,  2,  0,  3,  4,  0,  4, 1]

我不知道怎么做。请告诉我。谢谢。

假设
B
的排序越来越高,我想您正在寻找:

C = np.searchsorted(B,A)
输出:

array([0, 1, 2, 0, 3, 4, 0, 4, 1])
array([0, 1, 2, 0, 4, 3, 0, 3, 1], dtype=int64)

针对未排序的
B
的一般情况进行更新。我们可以执行
argsort

# let's swap 40 and 50 in B
# expect the output to have 3 and 4 swapped
B = [10, 20, 30, 50, 40]

BB = np.sort(B)

C = np.argsort(B)[np.searchsorted(BB,A)]
输出:

array([0, 1, 2, 0, 3, 4, 0, 4, 1])
array([0, 1, 2, 0, 4, 3, 0, 3, 1], dtype=int64)
您可以再次检查:

(np.array(B)[C] == A).all()
# True

假设
B
的排序越来越高,我认为您正在寻找:

C = np.searchsorted(B,A)
输出:

array([0, 1, 2, 0, 3, 4, 0, 4, 1])
array([0, 1, 2, 0, 4, 3, 0, 3, 1], dtype=int64)

针对未排序的
B
的一般情况进行更新。我们可以执行
argsort

# let's swap 40 and 50 in B
# expect the output to have 3 and 4 swapped
B = [10, 20, 30, 50, 40]

BB = np.sort(B)

C = np.argsort(B)[np.searchsorted(BB,A)]
输出:

array([0, 1, 2, 0, 3, 4, 0, 4, 1])
array([0, 1, 2, 0, 4, 3, 0, 3, 1], dtype=int64)
您可以再次检查:

(np.array(B)[C] == A).all()
# True

对于一般python列表

A = [10, 20, 30, 10, 40, 50, 10, 50, 20]
B = [10, 20, 30, 40, 50]


C = [A.index(e) for e in A if e in B]

print(C)

对于一般python列表

A = [10, 20, 30, 10, 40, 50, 10, 50, 20]
B = [10, 20, 30, 40, 50]


C = [A.index(e) for e in A if e in B]

print(C)
你可以试试这个代码

A = np.array([10, 20, 30, 10, 40, 50, 10, 50, 20])
B = np.array([10, 20, 30, 40, 50])

np.argmax(B==A[:,None],axis=1)
你可以试试这个代码

A = np.array([10, 20, 30, 10, 40, 50, 10, 50, 20])
B = np.array([10, 20, 30, 40, 50])

np.argmax(B==A[:,None],axis=1)

感谢您的回复,但在我的实际数组中,B没有排序,因此在A=np.array([10,20,30,10,40,50,10,50,20])B=np.array([40,50,10,20,30])C=np.searchsorted(B,A)的情况下它不起作用,因为B数组的顺序对于我代码的下一步很重要:(感谢您的回复,但在我的实际数组中,B没有排序,因此在A=np.array([10,20,30,10,40,50,10,50,20])的情况下它不起作用。B=np.array([40,50,10,20,30])C=np.searchsorted(B,A)不幸的是,无法对B进行排序,因为B数组的顺序对于我代码的下一步非常重要:(