我有一个numpy数组A和B.
A = [ 1, 2, 5, 9.8, 55, 3]
B = [ 3, 4]
现在,如何删除A [3]& A [4]是数组B所具有的索引,然后将它们放在数组A的开头。 所以,我希望我的输出是
A = [9.8, 55, 1, 2, 5, 3]
注意:A和B都是numpy数组。
非常感谢任何帮助。
答案 0 :(得分:1)
boolean-indexing
的一种方法是 -
mask = np.in1d(np.arange(A.size),B)
out = np.r_[A[mask], A[~mask]]
示例运行 -
In [26]: A = np.array([ 1, 2, 5, 9.8, 55, 3])
In [27]: B = np.array([ 3, 4])
In [28]: mask = np.in1d(np.arange(A.size),B)
In [29]: np.r_[A[mask], A[~mask]]
Out[29]: array([ 9.8, 55. , 1. , 2. , 5. , 3. ])
另一个整数索引 -
idx = np.setdiff1d(np.arange(A.size),B)
out = np.r_[A[B], A[idx]]
示例运行 -
In [36]: idx = np.setdiff1d(np.arange(A.size),B)
In [37]: np.r_[A[B], A[idx]]
Out[37]: array([ 9.8, 55. , 1. , 2. , 5. , 3. ])
答案 1 :(得分:0)
非拙劣的回答。
A = [ 1, 2, 5, 9.8, 55, 3]
B = [ 3, 4]
new_arr = [A[i] for i in B if i<len(A)] + [A[i] for i in range(len(A)) if i not in set(B)]
# [9.8, 55, 1, 2, 5, 3]
如果您确定,可以删除额外支票if i<len(A)
。