我正在尝试在 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/