Python numpy堆栈到二维数组,按索引从另一个堆栈中选择

Python numpy堆栈到二维数组,按索引从另一个堆栈中选择,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我有两组分类(Lc1和Lc2)和两组概率(Lp1和Lp2)Lp1是描述Lc1中分类可能性的一组概率。我想使用最可能的分类将Lc1和Lc2中的信息组合到class\u结果中 import numpy as np #example data Lp1 = np.ones((2,2))*0.5 Lc2 = np.ones((2,2)) Lc1 = np.ones((2,2)) Lp2 = np.ones((2,2))*0.5 #Change some values for the example

我有两组分类(
Lc1
Lc2
)和两组概率(
Lp1
Lp2
Lp1
是描述
Lc1
中分类可能性的一组概率。我想使用最可能的分类将
Lc1
Lc2
中的信息组合到
class\u结果中

import numpy as np

#example data
Lp1 = np.ones((2,2))*0.5
Lc2 = np.ones((2,2))

Lc1 = np.ones((2,2))
Lp2 = np.ones((2,2))*0.5

#Change some values for the example
Lp1[1,1] =0.95
Lc1[1,1] = 0

Lc2[0,1]=3
Lp2[0,1]=.95

p_stack = np.stack((Lp1,Lp2))
c_stack = np.stack((Lc1,Lc2))

index = np.argmax(p_stack, axis=2)

class_result = np.take(c_stack, index)
我的初始方法是为分类和概率集创建一个
np.stack
,并使用
np.argmax
查找轴索引,其中最大值出现在
p_stack
中。的文档似乎描述了我需要执行的操作,但我不明白为什么它返回一个包含1的数组。有没有办法通过指定要选择的值的轴来降低
np.stack
的维数

我期望的结果是:

class_result = np.array([[1,3],[1,0]])

在您的例子中,
ìndex
指的是第一个维度,您需要为其他维度创建升序索引

如果您手动编写它们,看起来

dim_1 = np.array([[0, 0],
                  [1, 1]])


dim_2 = np.array([[0, 1],
                  [0, 1]])

print(c_stack[index, dim_1, dim_2])
您可以使用
np.arange
np.vstack
np.hstack
np.tile
np.column\u stack
自动创建它们。有几种方法可以做到这一点

例如


Numpy中的这项技术称为。

您提供的这个链接非常有用。我知道,我每天都会访问它,因为我总是忘记它是如何工作的:)
x = np.arange(5)

a = np.tile(x, (5, 1))
b = np.column_stack(tuple(a))
print(a)
print(b)