Dil*_*rix 0 python arrays numpy slice
我有一些代码,我反复需要以复杂的方式重复广播数组,例如:
a = b[np.newaxis, ..., :, np.newaxis] * c[..., np.newaxis, np.newaxis, :]
Run Code Online (Sandbox Code Playgroud)
我可以存储这些切片规格的对象吗?
即(但显然这不起作用):
s1 = magic([np.newaxis, ..., :, np.newaxis])
s2 = magic([..., np.newaxis, np.newaxis, :])
Run Code Online (Sandbox Code Playgroud)
编辑:也许这可以完成numpy.broadcast_to,但目前还不清楚如何确保正确的轴广播...
您可以手动构造索引元组,但NumPy包含一个帮助器:
slice_tuple = np.s_[np.newaxis, ..., :, np.newaxis]
Run Code Online (Sandbox Code Playgroud)
那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()
Run Code Online (Sandbox Code Playgroud)