NGX*_*XII 1 python iteration optimization performance
我有一个巨大的4D数据集,在整个4个变量传播,x_list,y_list,z_list,和i_list.每个都是N个标量的列表,X,Y和Z代表点在空间中的位置,我代表强度.
通过将强度设置为0,我已经有一个功能可以选择并标记可忽略的点(强度太低的那些)进行删除.但是,当我在我的200万点设置上运行时,删除过程需要数小时.
目前,我使用.pop(index)命令删除数据点,因为它非常干净.这是代码:
counter = 0
i = 0
for entry in i_list
if (i_list[i] == 0):
x_list.pop(i)
y_list.pop(i)
z_list.pop(i)
i_list.pop(i)
counter += 1
print (counter, "points removed")
else
i += 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能更有效地做到这一点?
我认为为每个现有列表创建新的空列表会更快,如果是,则将项目附加到它们i_list[i] != 0.查看您正在进行的操作的时间复杂度,您将看到删除项目是O(n),而追加是O(1).目前你正在进行大量的O(n)删除,其中包含相当大的n,这将非常慢.
所以类似于:
new_x = []
new_y = []
new_y = []
new_i = []
for index in range(len(i_list)):
if i_list[index] != 0:
new_x.append(x_list[index])
new_y.append(y_list[index])
# Etc.
Run Code Online (Sandbox Code Playgroud)
更进一步,您应该查看numpy数组,其中子集化以查找i_list != 0非常快的项目集.
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |