I have a NumPy array like:
a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
什么是选择除某些位置的值(在我的例子中是0)最有效的方法?
所以我需要得到一个数组:
[1,2,3,4,5,6,7,8,9,10,11,12]
我知道如何使用[::n]
结构跳过一个第n个值,但是是否可能使用类似的语法跳过多个值?
感谢您的帮助!
I have a NumPy array like:
a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
什么是选择除某些位置的值(在我的例子中是0)最有效的方法?
所以我需要得到一个数组:
[1,2,3,4,5,6,7,8,9,10,11,12]
我知道如何使用[::n]
结构跳过一个第n个值,但是是否可能使用类似的语法跳过多个值?
感谢您的帮助!
np.delete
来实现此功能:>>> np.delete(a, [4, 5, 10, 11])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
If you want to get an index vector that you can use on multiple arrays:
import numpy as np
#your input
a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
#indices of elements that you want to remove (given)
idx = [4,5,10,11]
#get the inverted indices
idx_inv = [x for x in range(len(a)) if x not in idx]
a[idx_inv]
This output:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Use np.delete
:
import numpy as np
#your input
a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
#indices of elements that you want to remove (given)
idx = [4,5,10,11]
np.delete(a,idx)
This outputs:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
np.in1d
更高效地计算出idx_inv
。 - Danielimport numpy as np
a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
print a[a != 0]
# Output: [ 1 2 3 4 5 6 7 8 9 10 11 12]
你可以将a != 0
更改为其他条件,这些条件会产生布尔数组。
>>> a = np.array([1,2,3,4,0,0,5,6,7,8,0,0,9,10,11,12])
>>> a[a != 0]
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
a[(a != 4) & (a != 0)]
或 a[a < 3]
。 - falsetru