rec配列の値に最も近いnumpyレコード配列からすべての値を見つけようとしています(レコード配列の値の数は異なります)no1no2
no1フィールドがあるとしましょう:
('electrode', 'i4'), ('no_of_interest_time', 'i4'), ('time', 'f8')
ここで、timeは特定のイベントの時刻であり、no_of_interest_time個別に分析する必要があるイベントのインデックスを作成します。各イベントにはそのような番号が付けられ、複数のイベントが同じ番号を共有する場合があります。electrodeイベントが記録された電極のインデックスを保持します(場所)。
no2同じフィールドがありますが、異なるイベントを保持します。
recarrayの各イベントについて、同じタイプ()と場所( )のno2recarrayから最も近いイベントを見つけたいと思います。no1no_of_interest_timeelectrode
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]
アドバイスをいただければ幸いです。前もって感謝します!!