将一个较小的np数组添加到一个空的大型np数组中

时间:2019-01-18 11:44:49

标签: python numpy

希望这是一个简单的问题,我只是不知道正确的语法。

我目前的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”值开头,因此应该像将小数组添加到大数组的正确坐标一样简单,但是不知道这样做的语法。有人可以帮忙吗?

谢谢

2 个答案:

答案 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)

存在速度差异。循环效果更好。