将具有newaxis的多维numpy数组切片存储到object

时间:2017-09-20 17:44:04

标签: python arrays numpy slice

我有一些代码,我反复需要以复杂的方式重复广播数组,例如:

a = b[np.newaxis, ..., :, np.newaxis] * c[..., np.newaxis, np.newaxis, :]

我可以存储这些切片规格的对象吗?

即。 (但显然这不起作用):

s1 = magic([np.newaxis, ..., :, np.newaxis])
s2 = magic([..., np.newaxis, np.newaxis, :])

编辑:也许这可以通过numpy.broadcast_to来完成,但是目前还不清楚确保正确的轴在广播时的准确程度......

1 个答案:

答案 0 :(得分:5)

您可以手动构建索引元组,但NumPy包含helper

slice_tuple = np.s_[np.newaxis, ..., :, np.newaxis]

然后b[np.newaxis, ..., :, np.newaxis]相当于b[slicetuple]

作为参考,手动构建元组将是(np.newaxis, Ellipsis, slice(None), np.newaxis)。此外,np.newaxis is None,因此(None, Ellipsis, slice(None), None)也是等效的。

np.s_可以按照以下方式重新实现:

class IndexHelper(object):
    def __getitem__(self, arg):
        return arg

s_ = IndexHelper()