在不使用额外内存的情况下定义更高维的数组
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]]])
我想根据低维数组定义高维数组,而不占用额外的存储空间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]]])