Mic*_*rie 5 python numpy ipython
给定一个任意的一维掩码:
In [1]: import numpy as np
...: mask = np.array(np.random.random_integers(0,1,20), dtype=bool)
...: mask
Out[1]:
array([ True, False, True, False, False, True, False, True, True,
False, True, False, True, False, False, True, True, False,
True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
我们可以获得一个使用True元素的数组:masknp.flatnonzero
In[2]: np.flatnonzero(mask)
Out[2]: array([ 0, 2, 5, 7, 8, 10, 12, 15, 16, 18, 19], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
但是现在我如何扭转这个过程并从_2面具变成面具?
创建一个全假掩码,然后使用 numpy 的索引数组功能True为掩码分配条目。
In[3]: new_mask = np.zeros(20, dtype=bool)
...: new_mask
Out[3]:
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False], dtype=bool)
In[4]: new_mask[_2] = True
...: new_mask
Out[4]:
array([ True, False, True, False, False, True, False, True, True,
False, True, False, True, False, False, True, True, False,
True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
作为检查,我们看到:
In[5]: np.flatnonzero(new_mask)
Out[5]: array([ 0, 2, 5, 7, 8, 10, 12, 15, 16, 18, 19], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,_5 == _2:
In[6]: np.all(_5 == _2)
Out[6]: True
Run Code Online (Sandbox Code Playgroud)