我有一个2D numpy形状的阵列(N,2),它持有N个点(x和y坐标).例如:
array([[3, 2],
[6, 2],
[3, 6],
[3, 4],
[5, 3]])
Run Code Online (Sandbox Code Playgroud)
我想对它进行排序,使得我的点按x坐标排序,然后在x坐标相同的情况下按y排序.所以上面的数组应该如下所示:
array([[3, 2],
[3, 4],
[3, 6],
[5, 3],
[6, 2]])
Run Code Online (Sandbox Code Playgroud)
如果这是一个普通的Python列表,我只需要定义一个比较器来做我想要的,但据我所知,numpy的sort函数不接受用户定义的比较器.有任何想法吗?
编辑:感谢您的想法!我设置了一个包含1000000个随机整数点的快速测试用例,并对我可以运行的那些进行了基准测试(抱歉,目前无法升级numpy).
Mine: 4.078 secs
mtrw: 7.046 secs
unutbu: 0.453 secs
Run Code Online (Sandbox Code Playgroud) 我ndarray从一个文件中读取它,就像这样
my_data = np.genfromtxt(input_file, delimiter='\t', skip_header=0)
Run Code Online (Sandbox Code Playgroud)
示例输入(已解析)
[[ 2. 1. 2. 0.]
[ 2. 2. 100. 0.]
[ 2. 3. 100. 0.]
[ 3. 1. 2. 0.]
[ 3. 2. 4. 0.]
[ 3. 3. 6. 0.]
[ 4. 1. 2. 0.]
[ 4. 2. 4. 0.]
[ 4. 3. 6. 0.]]
Run Code Online (Sandbox Code Playgroud)
更长的示例输入(未解析).
前两列应该是int,而最后两列应该是float,但这就是我得到的.欢迎提出建议.
主要问题是,我正在尝试使用Numpy对其进行排序,以便行排序优先于第二列的数字,然后是第一列.
期望输出的示例
[[ 2. 1. 2. 0.]
[ 3. 1. 2. 0.]
[ 4. 1. 2. 0.]
[ …Run Code Online (Sandbox Code Playgroud)