Python中的最大值3D数组

时间:2017-03-30 10:15:27

标签: python arrays max

我们有一个3D阵列(671,9066,2):

  • 671 IdUser(集团)

  • 对于每个671位用户,我们有9066(行)电影和proba相关(2列)

1位用户的两列示例:

Proba                Idmovie
[  6.93933334e-02,   1.00000000e+00],
[  8.50563031e-02,   2.00000000e+00],
....
[  2.95071098e-02,   3.00000000e+00]

我们需要最大的proba(此处为8.50563031e-02)和第二列的值(此处为2.00000000e + 00)。这适用于每个671位用户!

非常感谢

2 个答案:

答案 0 :(得分:0)

肯定有一种更聪明的方法,但我的方法是:

import numpy as np

x = np.random.random((3,3,2))
print(x)


for user in x:
    maximum = np.max(user[:,0])
    index = np.where(user[:,0]==maximum)

    print(user[index])

最好的问候

答案 1 :(得分:0)

numpy中最紧凑的方式可能是这样的:

x[range(x.shape[0]),np.argmax(x, axis=1)[:,0],:]

<强>解释

np.argmax(x, axis=1)

返回第二个(“电影”)轴的最大值索引

np.argmax(x, axis=1)[:,0]

将此缩减为第一列,因为我们只需要最大问题的索引

使用这些索引作为索引数组,我们只需为每个用户检索相应的proba / idmovie元组。结果是一个形状数组(671,2),每个用户都有最大的proba和相关的电影ID。