希望这是一个简单的问题,我只是不知道正确的语法。
我目前的3D体积很小,由100,100,100的numpy数组定义。
对于我要测试的问题,我想将此卷放到更大的阵列中(现在大小无关紧要,但我在1000、1000、100阵列上进行测试)。
目前,我仅使用以下内容制作一个空的numpy数组:
BigArray = np.zeros((1000,1000,100),np.float16)
然后我有一个较小的数组,对于本示例而言,它可以是随机填充的数组。
SmallArray = np.random.rand(100,100,100)
从这里开始,我要遍历并用100,100,100数组填充1000,1000,100数组,并将每个多维数据集彼此相邻。大数组以“ 0”值开头,因此应该像将小数组添加到大数组的正确坐标一样简单,但是不知道这样做的语法。有人可以帮忙吗?
谢谢
答案 0 :(得分:1)
这应该做到-只需使用嵌套的标准for循环和numpy数组赋值语法即可:
small = np.random.rand(100, 100, 100)
big = np.zeros((1000, 1000, 100), dtype=np.int16)
for i in range(0, 1000, 100):
for j in range(0, 1000, 100):
big[i:i+100, j:j+100, :] = small
对于通用尺寸的3D阵列:
def inset_into(small, big):
sx, sy, sz = small.shape
bx, by, bz = big.shape
# make sure values work
assert bx % sx == 0
assert by % sy == 0
assert bz == sz
for i in range(0, bx, sx):
for j in range(0, by, sy):
big[i:i+sx, j:j+sy, :] = small
return big
答案 1 :(得分:0)
这应该是numpy切片。
small = np.random.rand(100, 100, 100)
big = np.zeros((1000, 1000, 100), dtype=np.int16)
如果您想通过一堆小商品赚大钱,这是另一种方式。
big = np.concatenate([small] * (big.shape[0] // small.shape[0]), axis=1)
big = np.concatenate([big] * (big.shape[1] // small.shape[1]), axis=0)
存在速度差异。循环效果更好。