我选择了一个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]]
答案 0 :(得分:2)
您希望使用choose
从b
中的长度为7的维度中选择值(大小为(2,3,7))。您选择的数组a
将适用于此,但前提是序列维度是最外层维度(如您所引用的)。 Numpy中最外层的维度是第一个维度。那么,您需要做的是滚动b
,使其具有尺寸(7,2,3)。
np.choose(a, np.rollaxis(b, 2, 0))