我想读取一个文件并比较一些值,查找重复的索引并删除重复的索引。 我在while循环中执行此过程。 这需要大约76秒的处理时间。 这是我的代码:
Source = np.empty(shape=[0,7])
Source = CalData (# CalData is the log file data)
CalTab = np.empty(shape=[0,7])
Source = Source[Source[:, 4].argsort()] # Sort by Azimuth
while Source.size >=1:
temp = np.logical_and(Source[:,4]==Source[0,4],Source[:,5]==Source[0,5])
selarrayindex = np.argwhere(temp) # find indexes
selarray = Source[temp]
CalTab = np.append(CalTab, [selarray[selarray[:,6].argsort()][-1]], axis=0)
Source = np.delete(Source, selarrayindex, axis=0) #delete other rows with similar AZ, EL
while循环处理需要更多时间。 任何其他方法(使用普通的python)没有使用numpy或Efficient numpy 请帮忙!!
答案 0 :(得分:0)
无论如何,这应该会影响你的时间,我想:
def lex_pick(Source):
idx = np.lexsort((Source[:, 6], Source[:, 5], Source[:, 4]))
# indices to sort by columns 4, then 5, then 6
# if dtype = float
mask = np.r_[np.logical_not(np.isclose(Source[idx[:-1], 5], Source[idx[1:], 5])), True]
# if dtype = int or string
mask = np.r_[Source[idx[:-1], 5] != Source[idx[1:], 5], True]
# `mask` is `True` in rows before where column 5 changes
return Source[idx[mask], 6]