在不使用额外内存的情况下定义更高维的数组

defining a higher dimensional array without using extra memory

我想根据低维数组定义高维数组,而不占用额外的存储空间space。我想知道这是否可能。我想我有一个使用广播的解决方案(见下文),但我认为它会占用额外的存储空间 space。

aa=np.arange(2).reshape(2,1)
bb=np.zeros(10).reshape(5,2,1)
bb+=aa

您可以使用np.broadcast_to

import numpy as np
import sys
 
aa=np.arange(2).reshape(2,1)                                                                                                                                            
bb=np.zeros((50,2,1))
bb+=aa
 
cc = np.broadcast_to(aa[None],bb.shape)
(cc == bb).all()
# True
 
sys.getsizeof(bb)
# 928
sys.getsizeof(cc)
# 128

您可以用一行代码创建相同的数组:

>>> np.array([0,1]*5).reshape(5,2,1)
array([[[0],
        [1]],

       [[0],
        [1]],

       [[0],
        [1]],

       [[0],
        [1]],

       [[0],
        [1]]])