问题描述
我有一些代码,需要反复以复杂的方式重复广播数组,例如:
I have some code where I repeatedly need to repeatedly broadcast arrays in complex ways, for example:
a = b[np.newaxis, ..., :, np.newaxis] * c[..., np.newaxis, np.newaxis, :]
是否存在可以存储这些切片规范的对象?
Is there an object to which I can store these slicing specifications?
即(但显然这是行不通的):
i.e. (but obviously this doesn't work):
s1 = magic([np.newaxis, ..., :, np.newaxis])
s2 = magic([..., np.newaxis, np.newaxis, :])
也许可以使用 numpy.broadcast_to
,但尚不清楚在确保正确的轴通过...广播时的精确度.
perhaps this could be done with numpy.broadcast_to
, but it's unclear how exactly while making sure that the correct axes are broadcast over...
推荐答案
您可以手动构造索引元组,但是NumPy包含帮手:
You can construct the index tuple manually, but NumPy includes a helper for it:
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)
等效.
For reference, constructing the tuple manually would be (np.newaxis, Ellipsis, slice(None), np.newaxis)
. Also, np.newaxis is None
, so (None, Ellipsis, slice(None), None)
would be equivalent.
np.s_
可以自己重新实现,如下所示:
np.s_
can be reimplemented yourself as follows:
class IndexHelper(object):
def __getitem__(self, arg):
return arg
s_ = IndexHelper()
这篇关于将带有newaxis的多维numpy数组切片存储到对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!