簡體   English   中英

用Python中相同形狀的邏輯數組索引數組

[英]Indexing an array with a logical array of the same shape in Python

我希望能夠做到:

a = [1,2,3]
a[[True, True, False]]
>> array([1,2])

我只是找不到簡單的方法...謝謝!

itertools.compress

>>> 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]

您可以玩內置的filtermap

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM