我有一个3D多维arr =(x,y,z)形状的numpy数组。在此示例中,形状=(10000,99,2)。
即我们有10000个99 x 2二维数组的实例。
我想通过z索引中的值对整个数组进行排序,即根据每个列中每个实例的99个变量进行排名。
是否有使用矢量化方法的简便方法?我知道我可以循环进行10000次迭代,对2d数组进行如下排序并组合为3d输出。
np.unique(arr[:,0], return_inverse=True)
np.unique(arr[:,1], return_inverse=True)
鉴于我有10000个外部实例,但是我有兴趣避免循环并以更有效的方式对所有10000个值进行排序。
我不确定我是否完全理解z得分,但是您可以尝试:
np.sort(arr,axis=1)
示例3-d输入:
import numpy as np
rng_seed = 42 # control reproducibility
rng = np.random.RandomState(rng_seed)
arr=rng.randint(0,40,20).reshape(2,5,2)
输入看起来像:
[[[38 28]
[14 7]
[20 38]
[18 22]
[10 10]]
[[23 35]
[39 23]
[ 2 21]
[ 1 23]
[29 37]]]
正在申请:
arr1=np.sort(arr,axis=1)
print (arr1)
为您提供每个实例中基于列的排序数组:
[[[10 7]
[14 10]
[18 22]
[20 28]
[38 38]]
[[ 1 21]
[ 2 23]
[23 23]
[29 35]
[39 37]]]
如果想要每个值的等级,请尝试:
arr_rank = arr.argsort(axis=1)
print (arr_rank)
输出为:
[[[4 1]
[1 4]
[3 3]
[2 0]
[0 2]]
[[3 2]
[2 1]
[0 3]
[4 0]
[1 4]]]