Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 如何根据数组和条件对numpy数组进行排序_Python_Numpy_Sorting_Conditional Statements - Fatal编程技术网

Python 如何根据数组和条件对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([

我有一个三列百行的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([[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]])