Python 如何根据数组和条件对numpy数组进行排序
我有一个三列百行的numpy数组。我想根据两列对它进行排序,在我的排序中,有时也会考虑第三列。这是我的输入(它们是Python 如何根据数组和条件对numpy数组进行排序,python,numpy,sorting,conditional-statements,Python,Numpy,Sorting,Conditional Statements,我有一个三列百行的numpy数组。我想根据两列对它进行排序,在我的排序中,有时也会考虑第三列。这是我的输入(它们是x、y和z坐标): 首先,我想根据第一列(x)和第二列(y)对其进行排序,然后根据第三列(z)修改此排序。关键问题是,我必须根据x和y对数据进行排序,不能将其更改为x和z或y和z,因为这样会更改所有点的顺序。这是我的分类代码: result_array=my_point[np.lexsort((my_point[:,1],my_point[:,0]))] 它给了我: array([
x
、y
和z
坐标):
首先,我想根据第一列(x
)和第二列(y
)对其进行排序,然后根据第三列(z
)修改此排序。关键问题是,我必须根据x
和y
对数据进行排序,不能将其更改为x
和z
或y
和z
,因为这样会更改所有点的顺序。这是我的分类代码:
result_array=my_point[np.lexsort((my_point[:,1],my_point[:,0]))]
它给了我:
array([[1., 0., 100.1],
[1., 2., 90.9],
[1.8, 0., 2.8],
[1.8, 1., 2.7],
[1.8, 2., 3.1],
[2., 0., 100.],
[2., 1., 100.],
[3., 0., 3. ],
[3., 2., 2.9]])
这是正确的,但我想根据第三列修改排序。我想考虑这个列的值,当它与相邻行高度不同时。如result\u array
所示,其第二行、第三行和第四行的第三列([1.8,0,2.8]
、[1.8,1,2.7]
和[1.8,2,3.1]
)的值与下两行相比非常低。这些行的x
值略高于下一行,在这种情况下,我想忽略它,优先考虑z
值:
array([[1., 0., 100.1],
[1., 2., 90.9],
[2., 0., 100.],
[2., 1., 100.],
[1.8, 0., 2.8],
[1.8, 1., 2.7],
[1.8, 2., 3.1],
[3., 0., 3. ],
[3., 2., 2.9]])
为了更清楚,我上传了一个图,显示了我在3d空间中所需的点顺序。我认为可以通过定义一个排序函数来实现,但我不知道如何实现。
在此之前,我非常感谢您的帮助。
您可以定义一个排序函数,如
sortfunc=my_point[:,0]*100+my_point[:,1]*10-my_point[:,2]
idx=np.argsort(sortfunc)
我的观点[idx]
#数组([[1,0,100.1],
# [ 1. , 2. , 90.9],
# [ 2. , 0. , 100. ],
# [ 2. , 1. , 100. ],
# [ 1.8, 0. , 2.8],
# [ 1.8, 1. , 2.7],
# [ 1.8, 2. , 3.1],
# [ 3. , 0. , 3. ],
# [ 3. , 2. , 2.9]])
当然,系数
100
、10
和-1
是一个调整的问题。亲爱的@Nils-Werner,很抱歉我的反馈太晚了。从昨天开始,我一直在处理我的数据。你的方法很好,但是有了新的数据,我有一个大问题,根本无法调整系数。你们知道其他的方法吗?不知道,但我建议你们用新的数据和问题来回答另一个问题。亲爱的@Nils-Werner,谢谢你们的帮助。我真的很感激。
array([[1., 0., 100.1],
[1., 2., 90.9],
[2., 0., 100.],
[2., 1., 100.],
[1.8, 0., 2.8],
[1.8, 1., 2.7],
[1.8, 2., 3.1],
[3., 0., 3. ],
[3., 2., 2.9]])