Numpy 用对应于另一个数组的索引替换值
我是numpy的新手。我有一个大小为[x,]的数组A和一个大小为[y,](y>x)的数组B。结果,我想要一个大小为[x,]的数组C,其中填充了索引B 以下是输入和输出的示例: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,
>>> 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数组的顺序对于我代码的下一步非常重要:(