【问题标题】:Store multidimensional numpy array slice with newaxis to object将带有 newaxis 的多维 numpy 数组切片存储到对象
【发布时间】:2017-09-20 17:44:04
【问题描述】:

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

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 来完成,但目前还不清楚如何准确地确保广播正确的轴...

【问题讨论】:

    标签: python arrays numpy slice


    【解决方案1】:

    您可以手动构造索引元组,但 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()
    

    【讨论】:

    • 谢谢!呃,我愚蠢地认为你不能将省略号存储到元组中(无论出于何种原因......)。为什么首选“助手”而不是手动?
    • @DilithiumMatrix:就是方便。
    猜你喜欢
    • 2015-10-23
    • 2021-11-23
    • 1970-01-01
    • 2016-04-11
    • 2015-01-29
    • 2012-02-20
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多