numpy的堆栈2D阵列,通过索引从另一个栈选择(numpy stack to 2d array,

2019-10-30 09:25发布

我有两套分类( Lc1Lc2 )和两套概率( Lp1Lp2 )。 Lp1是一组概率的描述在分类可能性Lc1 。 我想在信息结合Lc1Lc2使用是最有可能进入分类class_result

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 。 对于文档np.take似乎来形容,我需要做的工作,但我不明白为什么它返回与那些阵列。 是否有减少的维度的方式np.stack通过指定我要选择的值的轴?

我期望的结果是:

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

Answer 1:

你的情况, ì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.arangenp.vstacknp.hstacknp.tilenp.column_stack 。 有几种方法可以做到这一点。

x = np.arange(5)

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

这种技术在numpy的被称为“整数数组索引” 。



文章来源: numpy stack to 2d array, select by index from another stack