python - Numpy - 按第一个数组的单轴对两个 ndarray 进行排序

标签 python performance sorting numpy

我正在尝试在 numpy 中对两个大型四维数组进行排序。

我想根据第一个数组的值轴 2 进行排序,并按相同的索引对第二个数组进行排序。两个数组的所有其他轴应保持相同的顺序。

以下代码实现了我想要的功能,但依赖于 python 中的循环,因此速度很慢。数组非常大,因此出于性能原因,我真的很想使用编译的 numpy 操作来完成此操作。或者使用其他一些方法来编译此代码块(Cython?)。

import numpy as np

data = np.random.rand(10,6,4,1)
data2 = np.random.rand(10,6,4,3)

print data[0,0,:,:]
print data2[0,0,:,:]

for n in range(data.shape[0]):
  for m in range(data.shape[1]):

    sort_ids = np.argsort(data[n,m,:,0])

    data[n,m,:,:] = data[n,m,sort_ids,:]
    data2[n,m,:,:] = data2[n,m,sort_ids,:]


print data[0,0,:,:]
print data2[0,0,:,:]

最佳答案

也许有更好的解决方案,但这应该可行:

sort_ids = np.argsort(data,axis=2)

s1 = data.shape
s2 = data2.shape
d1 = data[np.arange(s1[0])[:,None,None,None],np.arange(s1[1])[None,:,None,None],sort_ids,np.arange(s1[3])[None,None,None,:]]
d2 = data2[np.arange(s2[0])[:,None,None,None],np.arange(s2[1])[None,:,None,None],sort_ids,np.arange(s2[3])[None,None,None,:]]

至少输出与您的代码相同。

关于python - Numpy - 按第一个数组的单轴对两个 ndarray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29257110/

相关文章:

python - Series 的真值不明确 - 调用函数时出错

python - 在 python 中,如何将 1 个或多个文件作为具有绝对路径的参数拖放到我的脚本中? (适用于 Windows、Linux 和 Mac)

performance - 动画 SVG 旋转器使用过多的 cpu 和 gpu

SQL Server 2008 分区表和并行性

c++ - 对类成员排序得到错误 Unresolved 重载函数类型

python - 搜索排序列表?

python - 如何根据另一列部分字符串在 panda 中添加列

python - python中的Np随机采样

java - 自动执行 jprofiler 分析并保存快照

按频率图对字符串 slice 进行排序