Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中按特定值的特定索引对列表元素进行排序_Python_Arrays_Performance_Sorting_Dataset - Fatal编程技术网

如何在python中按特定值的特定索引对列表元素进行排序

如何在python中按特定值的特定索引对列表元素进行排序,python,arrays,performance,sorting,dataset,Python,Arrays,Performance,Sorting,Dataset,我有一个500000个三维坐标和500000个rgb补丁的数据集。首先,我想在从数据集中删除一些错误数据后,在开始时对三维坐标进行排序,使其具有最相似的值。为此,我采取了以下行动: #加载保存的数据集 打印(“开始放置数据集…”) X=np.荷载('train_RGB-PATCHS_Fire_SEQU 01.npy') Y=np.荷载('列车\u 3DPoses-Patches\u火灾\u seq01.npy') 打印(“结束加载数据集=>Shapes:”,X.shape,Y.shape) 打印

我有一个500000个三维坐标和500000个rgb补丁的数据集。首先,我想在从数据集中删除一些错误数据后,在开始时对三维坐标进行排序,使其具有最相似的值。为此,我采取了以下行动:

#加载保存的数据集
打印(“开始放置数据集…”)
X=np.荷载('train_RGB-PATCHS_Fire_SEQU 01.npy')
Y=np.荷载('列车\u 3DPoses-Patches\u火灾\u seq01.npy')
打印(“结束加载数据集=>Shapes:”,X.shape,Y.shape)
打印(“最大-最小三维原件:”,Y.max(),“,”,Y.min())
打印(“开始纠正3D_补丁数据集…”)
Y_faux_indx=np.unique(np.argwhere(Y>15)[:,0]。重塑(-1,1)))
Y_correct=np.delete(Y,Y_faux_indx,0)
X_correct=np.delete(X,Y_faux_indx,0)
Y_sorted=np.array(排序(Y_correct.tolist())。重塑(-1,4))
打印(“结束纠正3D_补丁数据集…”)
现在根据已排序的3D标签,我想从之前未排序的校正数据中获取这些已排序数据的索引,然后根据这些索引的索引排列rgb数据。为此,我编写了这段代码,执行这段代码需要很长时间:

print("Begin Sorting 3D_Patches Dataset ...")
sorted_dataset_indx = []
for j in range(len(Y_sorted)):
    element_verification = Y_correct == Y_sorted[j]
    for i in range(len(element_verification)):
        if element_verification[i].prod()==1:
            if i not in sorted_dataset_indx:
                sorted_dataset_indx.append(i)
 sorted_dataset_indx = np.array(sorted_dataset_indx)
 X_sorted = X_correct[sorted_dataset_indx]
 print("End Sorting 3D_Patches Dataset => Shapes : ",X_sorted.shape,Y_sorted.shape)
 print("max - min 3D new : ",Y_sorted.max()," , ", Y_sorted.min())

因此,我需要另一种解决方案来帮助我更快地执行此操作?

使用循环,尤其是嵌套循环,通常会比较慢,应该尽可能避免使用。
很明显,我无法复制您的代码,但这里有一个玩具示例,用于适应您的用例:

list1 = [1, 10, 2, 3, 5, 0, 1.5]
list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
enumerated_list1 = list(enumerate(list1))
enumerated_list1.sort(key=lambda x: x[1])
sorting_inds = [x[0] for x in enumerated_list1]
list2_sorted_by_list1 = [list2[i] for i in sorting_inds]

提供一个数据集示例(10条记录),并将代码缩短到给您带来麻烦的部分,以创建.Wrt“对三维坐标进行排序,使其具有最相似的值”-根据您的定义,“相似”是什么?最小绝对差?MSR?@aneroid我想这没关系。他正在询问正在描述的流程的下一步……aneroid感谢您的回答,正如@Shlomif所说,我询问了流程的第二部分。经过一些小的修改以适应我的用例后,给出的答案运行良好。谢谢大家的回答。我刚刚编辑了lambda排序函数,以便根据多维数组(3d坐标)进行排序,如“enumerated_list1.sort(key=lambda x:x[1].tolist())”