Python Выравнивание массива всегда один и тот же вывод, даже с разным вводом - PullRequest
0 голосов
/ 03 февраля 2020

Хорошо, так что, очевидно, я сделал здесь что-то смешное. Но я не понимаю, в чем проблема.

Вот идея: у меня есть 3 3D-массива, которые имеют немного другой размер. Мне нужно, чтобы все они имели одинаковую форму (позже я помещаю их в CNN, вот почему). Поэтому я хотел создать массив, заполненный нулями, который имеет форму, которая может вместить один массив. При этом я получаю 3 массива, которые имеют одинаковый размер и дополняются нулями.

Но проблема в том, что всякий раз, когда я вызываю эту функцию, все три выхода являются выходом последнего вызова. Информация предыдущих звонков теряется. Я не понимаю, что не так с кодом. Предыдущие вызовы не должны иметь доступа к третьему вызову. Почему они содержат одинаковую информацию?

Вот упрощенный пример:

import numpy as np

def al_array(array, big_arr):
    diff_z = (big_arr.shape[0] - array.shape[0]) // 2
    diff_x = (big_arr.shape[1] - array.shape[1]) // 2
    diff_y = (big_arr.shape[2] - array.shape[2]) // 2
    end_z = diff_z + array.shape[0]
    end_x = diff_x + array.shape[1]
    end_y = diff_y + array.shape[2]

    big_arr[diff_z:end_z,diff_x:end_x,diff_y:end_y] = array
    return big_arr

def get_array(shapes):
    z = np.amax(shapes[:,0])
    x = np.amax(shapes[:,1])
    y = np.amax(shapes[:,2])
    out = np.zeros((z,x,y))
    return out
if __name__ == "__main__":
    a1 = np.random.randint(5, size=(3,4, 8))
    a2 = np.random.randint(5, size=(2,3, 5))
    a3 = np.random.randint(5, size=(2,6, 4))
    print(a1.shape)
    zero_arr=get_array(np.asarray([np.asarray(a1.shape),np.asarray(a2.shape),np.asarray(a3.shape)]))
    print(zero_arr)
    ab1 = al_array(a1, zero_arr)
    ab2 = al_array(a2, zero_arr)
    ab3 = al_array(a3, zero_arr)
    print(ab1)
    print((np.equal(ab1,ab2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...