从numpy数组中删除数字

din*_*eep 3 python arrays numpy vectorization

让我们说我有一个数字的数字(例如:整数).我想k在序列中的任何地方丢弃数字.目前我正在为此写一个for循环,这似乎是一种矫枉过正.有没有直接的方法呢?一般来说,如果我有一个以上的数字要被删除怎么办?

Div*_*kar 5

假设A输入数组和B包含要删除的数字的数组,您可以使用np.in1d获取Bin 的匹配掩码,A然后使用掩码的反转版本进行映射A并获得所需的输出.这是实现的样子 -

A[~np.in1d(A,B).reshape(A.shape)]
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [14]: A
Out[14]: array([3, 2, 1, 4, 3, 3, 2, 2, 4, 1])
In [15]: B
Out[15]: array([2, 4])

In [16]: A[~np.in1d(A,B).reshape(A.shape)]
Out[16]: array([3, 1, 3, 3, 1])
Run Code Online (Sandbox Code Playgroud)

对于2D输入数组的情况,你会得到一个1D数组作为输出,就像这样 -

In [21]: A
Out[21]: 
array([[3, 3, 3, 4, 0, 4],
       [2, 4, 4, 4, 4, 3],
       [1, 2, 4, 4, 3, 1],
       [0, 3, 1, 4, 1, 1]])

In [22]: B
Out[22]: array([2, 4])

In [23]: A[~np.in1d(A,B).reshape(A.shape)]
Out[23]: array([3, 3, 3, 0, 3, 1, 3, 1, 0, 3, 1, 1, 1])
Run Code Online (Sandbox Code Playgroud)