Хорошо, так что, очевидно, я сделал здесь что-то смешное. Но я не понимаю, в чем проблема.
Вот идея: у меня есть 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)))