簡體   English   中英

將 1d 掩碼數組表示為切片列表

[英]Express 1d masked array as list of slices

我有一個帶有布爾值( mask )的 1d numpy 數組,我想將其轉換為掩碼為 True 的切片列表,例如:

mask = [False, True, True, True, False, False, True, True]

我想獲得

[slice(1, 4, None), slice(6, 8, None)]

numpy 屏蔽數組操作(特別是np.ma.clump_masked() )可以做到這一點,但我發現使用它的唯一方法是執行以下操作:

np.ma.clump_masked(np.ma.masked_array(np.ones_like(mask), mask))

這正是我正在尋找的:

[切片(1、4、無)、切片(6、8、無)]

即,生成一個與mask具有相同形狀的數組,對其應用掩碼,然后在其上計算mask_clumped()

但是, np.ma.masked_array(np.ones_like(mask), mask)對我來說似乎是不必要的。 有什么方法可以從我想象如下所示的簡化操作中獲取切片列表?

np.ma.clump_masked(mask)

np.ma.masked_array需要一個屏蔽數組作為輸入,而不是ndarray 一種方法是做你目前正在做的事情並創建一個屏蔽數組

import numpy as np
mask = np.asarray([False, True, True, True, False, False, True, True])
masked_array = np.ma.masked_array(data=mask, mask=mask)
np.ma.clump_masked(masked_array)

但是,我假設您是根據某些條件生成mask 在這種情況下,您可以使用np.ma.masked_where 例如,要獲取從 0 到 9 的每個偶數的所有切片:

import numpy as np
arr = np.arange(10)
masked_arr = np.ma.masked_where(arr % 2 == 0, arr)
np.ma.clump_masked(masked_arr)

輸出:

[slice(0, 1, None),
 slice(2, 3, None),
 slice(4, 5, None),
 slice(6, 7, None),
 slice(8, 9, None)]

還有其他函數,例如np.ma.masked_inside ,它將創建一個屏蔽數組並屏蔽某個間隔內的所有元素。 查看masked_where文檔的“另請參閱”以獲取相關函數的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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