Добавление меньшего массива np в пустой большой массив np - PullRequest
0 голосов
/ 18 января 2019

Надеюсь, что это простая проблема, и я просто не знаю правильный синтаксис.

В настоящее время у меня есть маленький трехмерный том, который определен массивом 100 100 100

.

Для проблемы, которую я тестирую, я хочу поместить этот том в больший массив (неважно, насколько он велик сейчас, но я тестирую на массиве 1000, 100, 100).

В настоящее время я просто создаю пустой массив с использованием следующего:

BigArray = np.zeros((1000,1000,100),np.float16)

Тогда у меня есть мой меньший массив, который для целей этого примера может быть просто случайно заполненным массивом .:

SmallArray = np.random.rand(100,100,100)

Отсюда я хочу просмотреть и заполнить массив 1000, 100, 100 массивом 100, 100, 100, поместив каждый куб рядом друг с другом. Большой массив начинается со значения «0», поэтому это должно быть так же просто, как просто добавить маленький массив в правильные координаты большого массива, однако не имеет представления о синтаксисе для этого. Может ли кто-нибудь помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Это должно быть просто нарезка кусочков.

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)

Существует разница в скорости,Цикл лучше.

0 голосов
/ 18 января 2019

Это должно сделать это - просто используйте стандартный вложенный для цикла и синтаксис присваивания массивов:

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 

Для трехмерных массивов общего размера:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...