rec配列の値に最も近いnumpy
レコード配列からすべての値を見つけようとしています(レコード配列の値の数は異なります)no1
no2
no1
フィールドがあるとしましょう:
('electrode', 'i4'), ('no_of_interest_time', 'i4'), ('time', 'f8')
ここで、time
は特定のイベントの時刻であり、no_of_interest_time
個別に分析する必要があるイベントのインデックスを作成します。各イベントにはそのような番号が付けられ、複数のイベントが同じ番号を共有する場合があります。electrode
イベントが記録された電極のインデックスを保持します(場所)。
no2
同じフィールドがありますが、異なるイベントを保持します。
recarrayの各イベントについて、同じタイプ()と場所( )のno2
recarrayから最も近いイベントを見つけたいと思います。no1
no_of_interest_time
electrode
forループを使用して解決する方法は次のようになりますが、もっとエレガントな解決策を探しています。
import numpy as np
i_recarr1 = np.argsort(recarray1, order=['electrode', 'no_of_interest_time', 'time'])
recarr1_sorted = recarray1[i_recarr1]
i_recarr2 = np.argsort(recarray2, order=['electrode', 'no_of_interest_time', 'time'])
recarr2_sorted = recarray2[i_recarr2]
closest_events = recarr2_sorted.copy()
for electr in np.unique(recarr2_sorted['electrode']):
# use only this electrode
recarr1_record = recarr1_sorted[recarr1_sorted['electrode'] == electr]
recarr1_record = recarr2_sorted[recarr2_sorted['electrode'] == electr]
for interest in np.unique(recarr2_record['no_of_interest_time']):
# use only this time of interest
recarr1_interest = recarr1_sorted[recarr1_record['no_of_interest_time'] == interest]
recarr2_interest = recarr1_sorted[recarr1_record['no_of_interest_time'] == interest]
for idx, event2 in np.enumerate(recarr2_interest['time']):
# loop through every event to find neighbours
selected_idx = (np.abs(recarr1_interest['time']-event2)).argmin()
closest_events[(closest_events['electrode'] == electr) &
(closest_events['no_of_interest_time']) == interest][idx] = recarr1_interest['time'][selected_idx]
inverse_i = np.argsort(i_recarr2)
closest_events[inverse_i]
アドバイスをいただければ幸いです。前もって感謝します!!