本文主要解釋了如何根據給定的索引對一維數組進行反選的操作。
以下文數據為例
import numpy as np
data = np.array([ 0.93825827, 0.26701143, 0.99121108, 0.35582816, 0.90154837, 0.86254049, 0.83149103, 0.42222948, 0.27309625, 0.38925281]
)
如果我們給定一個閾值比如0.5來篩選數值,我們可以通過以下操作來選取相應的項
greater_than_05 = data[data>0.5]
less_than_05 = data[data<=0.5]
print("greater_than_05 : \n", greater_than_05)
print("less_than_05 : \n", less_than_05)
輸出結果如下 :
greater_than_05 :
[0.93825827 0.99121108 0.90154837 0.86254049 0.83149103]
less_than_05 :
[0.26701143 0.35582816 0.42222948 0.27309625 0.38925281]
那么在更加復雜的情況下,例如,我們給出索引sample_indexes = [0,1,2],如何反選剩下的項呢。首先我們需要知道的就是,npy數組是可以使用bool型的索引的,當bool型索引數組的長度與目標len(data)相同時,我們就會從data中選出對應索引數組中所有True對應的項。下面用一個簡單的例子解釋 :
sample_indexes=[0,1,2]
mask = np.ones(len(data), np.bool)
mask[sample_indexes] = False
print("mask :\n",mask)
other_data = data[mask]
print("other_data : \n",other_data)
輸出結果如下 :
mask :
[False False False True True True True True True True]
other_data :
[0.35582816 0.90154837 0.86254049 0.83149103 0.42222948 0.27309625
0.38925281]
其中我們首先創建一個與目標1D數組長度相同的bool型數組,將sample_index對應的改為false,之后就可以通過剩下的mask索引來反選出其他的數據了。