如何在numpy.array中找到对应于其np.percentile结果的索引?

ds97pgxw  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(84)

我想计算np.数组的np.百分位数,并在np.数组中找到它们对应的索引。稍后,我想使用这些索引来获取不同但形状相同的np.array中的值。大概是这样的:

import numpy as np

np.random.seed(1)

a = np.random.randint(10, size=(3,3))
b = np.random.randint(10, size=(3,3))
c = np.random.randint(10, size=(3,3))

l = np.random.randint(11,20, size=(3,3))
m = np.random.randint(11,20, size=(3,3))
n = np.random.randint(11,20, size=(3,3))

abc = np.dstack((a,b,c))
lmn = np.dstack((l,m,n))

abc
array([[[5, 9, 7],
    [8, 2, 9],
    [9, 4, 1]],

   [[5, 5, 7],
    [0, 2, 0],
    [0, 4, 6]],

   [[1, 2, 9],
    [7, 4, 9],
    [6, 7, 7]]])

lmn
array([[[17, 14, 11],
    [12, 17, 14],
    [11, 16, 13]],

   [[12, 12, 11],
    [19, 14, 15],
    [19, 15, 13]],

   [[14, 19, 18],
    [19, 12, 18],
    [18, 15, 19]]])

np.percentile(abc,50,axis=2)
array([[7., 8., 4.],
   [5., 0., 4.],
   [2., 7., 7.]])

我想创建一个np.数组使用值从'lmn'和索引位置导致形式np.百分位数(abc,50,轴=2)。
预期结果如下:

array([[11., 12., 16.],
   [12., 15., 15.],
   [19., 19., 15.]])
a5g8bdjr

a5g8bdjr1#

我找到了一个解决办法:

import numpy as np
np.random.seed(1)

a = np.random.randint(10, size=(3, 3))
b = np.random.randint(10, size=(3, 3))
c = np.random.randint(10, size=(3, 3))

l = np.random.randint(11,20, size=(3, 3))
m = np.random.randint(11,20, size=(3, 3))
n = np.random.randint(11,20, size=(3, 3))

abc = np.dstack((a,b,c))
lmn = np.dstack((l,m,n))

al = np.rec.fromarrays([a, l])
bm = np.rec.fromarrays([b, m])
cn = np.rec.fromarrays([c, n])

albmcn = np.dstack((al,bm,cn))

arr_data = []

for i in range(0,a.shape[0]):
    for j in range(0,a.shape[1]):
        if albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])].shape[0]==1:
            comp1 = albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])][0]
        if albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])].shape[0] % 2 == 0:
            comp1 = albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])][int(albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])].shape[0]/2-1)]
        else:
            comp1 = albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])][int(np.floor(albmcn['f1'][i][j][np.where(albmcn['f0'][i][j]==np.percentile(albmcn['f0'],50, axis=2)[i][j])].shape[0]/2))]
        arr_data.append(comp1)

out_array = np.reshape(arr_data,(a.shape[0],a.shape[1]))

out_array
array([[11, 12, 16],
       [12, 19, 15],
       [19, 19, 15]])

相关问题