np.fmodに絡んだnumpy記載メモ

x_train = x[np.fmod(range(16), 4) !=i]

という記述があり、意味がわからず、調べて理解したのでメモ

i には、

for i in range(0,4)

x は、np.array

x = np.array([15.42555012, 23.00811234,  5.00285937, 12.55831432,  8.66889727, 7.30846487,  9.65650528, 13.63901818, 14.91918686, 18.47041835, 15.47986286, 2.13048751, 10.11130624, 26.95293591,  5.68468983, 21.76168775])

np.fmodは、

In [3]: np.fmod(10,3) == 10%3
Out[3]: True

と同じ

In [32]: np.fmod(range(16), 4)
Out[32]: array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int32)

iに0が入ったら、

In [24]:  [np.fmod(range(16), 4) !=0]
Out[24]: 
[array([False,  True,  True,  True, False,  True,  True,  True, False, True,  True,  True, False,  True,  True,  True])]

Falseが取り除かれ、Trueが残るってことか、、、

In [47]: x[np.fmod(range(16), 4) !=0]
Out[47]:
array([23.00811234,  5.00285937, 12.55831432,  7.30846487,  9.65650528,13.63901818, 18.47041835, 15.47986286,  2.13048751, 26.95293591, 5.68468983, 21.76168775])
In [48]: x
Out[48]:
array([15.42555012, 23.00811234,  5.00285937, 12.55831432,  8.66889727, 7.30846487,  9.65650528, 13.63901818, 14.91918686, 18.47041835, 15.47986286,  2.13048751, 10.11130624, 26.95293591,  5.68468983, 21.76168775])

numpyならではの書き方ね。