Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从numpy数组中删除数字_Python_Arrays_Numpy_Vectorization - Fatal编程技术网

Python 从numpy数组中删除数字

Python 从numpy数组中删除数字,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,假设我有一个数的numpy数组(例如:整数)。我想把数字k放到序列中发生的任何地方。目前,我正在为此编写一个for循环,这似乎有点过头了。有直截了当的方法吗?一般来说,如果我有一个以上的数字要删除怎么办 假设A到输入数组,并且B是包含要删除的数字的数组,您可以使用在A中获得匹配B的掩码,然后使用掩码的反转版本映射A,并获得所需的输出。下面是实现的样子- A[~np.in1d(A,B).reshape(A.shape)] 样本运行- In [14]: A Out[14]: array([3, 2

假设我有一个数的numpy数组(例如:整数)。我想把数字
k
放到序列中发生的任何地方。目前,我正在为此编写一个for循环,这似乎有点过头了。有直截了当的方法吗?一般来说,如果我有一个以上的数字要删除怎么办

假设
A
到输入数组,并且
B
是包含要删除的数字的数组,您可以使用在
A
中获得匹配
B
的掩码,然后使用掩码的反转版本映射
A
,并获得所需的输出。下面是实现的样子-

A[~np.in1d(A,B).reshape(A.shape)]
样本运行-

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])
对于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])

如果您试图检查单个标量值。在numpy中,当您将向量与标量值进行比较时,会返回一个
True/False
值数组,其中每个元素表示标量值与元素比较的结果。范例-

In [15]: a = np.random.randint(10,100, (100,))

In [16]: a
Out[16]:
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27,
       70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98,
       11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59,
       52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81,
       50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38,
       10, 55, 57, 55, 41, 15, 14, 91, 69, 80, 43, 83, 31, 21, 76])

In [17]: a != 15
Out[17]:
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
       False,  True,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)
In [18]: a[a != 15]
Out[18]:
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27,
       70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98,
       11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59,
       52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81,
       50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38,
       10, 55, 57, 55, 41, 14, 91, 69, 80, 43, 83, 31, 21, 76])
然后,您可以使用此
bool
数组对原始数组进行索引,该数组将返回索引数组的
True
,这是该数组的一部分。范例-

In [15]: a = np.random.randint(10,100, (100,))

In [16]: a
Out[16]:
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27,
       70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98,
       11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59,
       52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81,
       50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38,
       10, 55, 57, 55, 41, 15, 14, 91, 69, 80, 43, 83, 31, 21, 76])

In [17]: a != 15
Out[17]:
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
       False,  True,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)
In [18]: a[a != 15]
Out[18]:
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27,
       70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98,
       11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59,
       52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81,
       50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38,
       10, 55, 57, 55, 41, 14, 91, 69, 80, 43, 83, 31, 21, 76])

难道你不能简单地使用
a[a!=]
?是的,我可以。它是否保证顺序被保留?是的,它应该以相同的顺序返回元素。