从数组中删除子数组

时间:2017-03-22 07:51:32

标签: python numpy

我有一个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数组。

非常感谢任何帮助。

2 个答案:

答案 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)