[英]Indexing an array with a logical array of the same shape in Python
我希望能夠做到:
a = [1,2,3]
a[[True, True, False]]
>> array([1,2])
我只是找不到簡單的方法...謝謝!
>>> from itertools import compress
>>> a = [1,2,3]
>>> mask = [True, True, False]
>>> list(compress(a, mask))
[1, 2]
如果您使用的是numpy ,則可以直接使用遮罩切片:
>>> np.array(a)[np.array(mask)]
>>> array([1, 2])
如果a
和mask是真正的Python數組,則可以進行簡單的列表理解:
arr = [1,2,3]
mask = [True, True, False]
[a for a, m in zip(arr, mask) if m]
如果可以接受其他導入,則可以使用@ moses-koledoye的使用itertools.compress
的建議。
另一方面,如果您使用numpy
,如array([1,2])
的最終輸出所示,則可以直接進行索引:
import numpy as np
arr = np.array([1, 2, 3])
mask = np.array([True, True, False])
arr[mask]
請注意,mask必須是實際的np.boolean
數組。 您不能只使用[True, True, False]
類的Python列表。 這是因為np.array.__getitem__
檢查輸入是否正好是另一個數組。 如果不是,則輸入將轉換為整數,因此您最終將使用[1, 1, 0]
而不是掩碼)進行有效索引。 您可以在此處獲取有關此特定切線問題的更多詳細信息: https : //stackoverflow.com/a/39168021/2988730
您可以使用zip
和列表理解。
a = [1,2,3]
b = [True, True, False]
c = [i for i,j in zip(a,b) if j]
您可以玩內置的filter
和map
k = [True, True, False, True]
l = [1,2,3,4]
print map(lambda j: j[1], filter(lambda i: i[0], zip(k,l)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.