Numpy选择形状不匹配

时间:2016-08-12 15:29:59

标签: python numpy

我选择了一个numpy问题。我想选择某些索引,如数组b中的数组a所述。

a
Out[54]: 
array([[3, 2, 2],
       [0, 0, 2]], dtype=int64)

b
Out[55]: 
array([[[  6.,   1.,   8.,   9.,   3.,   8.,   5.],
        [  6.,   1.,   5.,   8.,   2.,   2.,  10.],
        [  6.,   1.,   1.,   0.,   9.,   3.,   6.]],

       [[ 11.,   3.,   8.,   9.,   3.,   8.,   5.],
        [ 12.,   7.,   5.,   8.,   2.,   2.,  10.],
        [  8.,   9.,   1.,   0.,   9.,   3.,   6.]]])

np.choose(a,b)
ValueError: shape mismatch: objects cannot be broadcast to a single shap

在numpy的文档中,它说: 选择阵列。 a和所有选项必须可以播放到相同的形状。如果选择本身就是一个数组(不推荐),那么它的最外层维度(即,对应于choices.shape [0]的那个维度)被视为定义“序列”。

我看到不建议从ndarray中进行选择,但是还是有一种优雅的numpy方式来让它工作吗?任何建议都表示赞赏。

预期输出为:

[[9,5,1], [11,12,1]]

1 个答案:

答案 0 :(得分:2)

您希望使用chooseb中的长度为7的维度中选择值(大小为(2,3,7))。您选择的数组a将适用于此,但前提是序列维度是最外层维度(如您所引用的)。 Numpy中最外层的维度是第一个维度。那么,您需要做的是滚动b,使其具有尺寸(7,2,3)。

np.choose(a, np.rollaxis(b, 2, 0))