脾气暴躁的选择形状不匹配

尼克皮克

我在选择方面遇到了一些麻烦。我想从数组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的文档中说:选择数组。和所有选择必须广播为相同的形状。如果choices本身是一个数组(不建议使用),则将其最外面的维度(即对应于choices.shape [0]的维度)定义为“序列”。

我看到不建议从ndarray中进行选择,但是有一种优雅的numpy方法可以使它正常工作吗?任何建议表示赞赏。

预期输出为:

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

看起来您想用来choose从长度为7的维度b(大小为(2,3,7))中选择值您选择的数组a将对此有效,但前提是序列维是最外面的维(如您所引用的)。Numpy中最外面的尺寸是第一尺寸。然后,您需要做的是滚动b,使其具有尺寸(7,2,3)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章