Заполнить массив np.zeros значениями из другого массива

Рейтинг: 0Ответов: 1Опубликовано: 12.06.2023

У меня есть массив с кол-вом пассажиров в поезде train_3 с формой (12,10,2), где 12 - это кол-во вагонов, 10 - кол-во купе в вагоне и 2 - разделение на верхние и нижние места в купе. Также есть дома (массив houses), в которые нужно заселить всех жителей поезда. Массив houses создал через np.zeros(12 * 4 * 2).reshape(12,4,2), где 12 - кол-во домов, 4 - кол-во этажей, 2 - кол-во квартир на этаже. Хочу, чтобы в массив houses рандомно заселились кол-ва пассажиров из train_3. То есть в новом массиве houses_update могут быть значения не только 0,1 или 2, а в одной квартире, например, может проживать 10 человек, а в другой вообще никого. Главное, чтобы train_3.sum() был равен houses_update.sum()

train_3 = np.random.randint(0,2+1,12*10*2).reshape(12,10,2)

array([[[1, 0],
        [1, 2],
        [0, 2],
        [1, 1],
        [1, 0],
        [0, 0],
        [2, 2],
        [1, 2],
        [0, 2],
        [2, 0]],

       [[2, 1],
        [1, 0],
        [1, 0],
        [2, 0],
        [1, 2],
        [2, 1],
        [1, 1],
        [1, 2],
        [2, 2],
        [2, 2]],

       [[1, 1],
        [2, 2],
        [0, 2],
        [2, 0],
        [2, 2],
        [1, 0],
        [0, 2],
        [0, 0],
        [0, 1],
        [1, 1]],

       [[1, 1],
        [1, 2],
        [0, 0],
        [0, 0],
        [1, 0],
        [0, 2],
        [2, 0],
        [1, 1],
        [2, 2],
        [1, 1]],

       [[0, 0],
        [0, 1],
        [2, 2],
        [0, 0],
        [1, 1],
        [2, 2],
        [1, 2],
        [2, 1],
        [1, 1],
        [2, 2]],

       [[1, 2],
        [1, 0],
        [2, 2],
        [1, 0],
        [2, 1],
        [2, 2],
        [0, 0],
        [2, 1],
        [1, 1],
        [2, 1]],

       [[2, 1],
        [1, 0],
        [2, 1],
        [2, 2],
        [0, 0],
        [1, 2],
        [2, 1],
        [1, 1],
        [2, 1],
        [1, 1]],

       [[1, 0],
        [0, 0],
        [0, 2],
        [1, 2],
        [0, 1],
        [0, 2],
        [0, 0],
        [1, 2],
        [1, 2],
        [1, 2]],

       [[1, 0],
        [0, 1],
        [1, 2],
        [2, 2],
        [1, 1],
        [1, 0],
        [0, 2],
        [1, 0],
        [2, 2],
        [1, 1]],

       [[2, 2],
        [0, 2],
        [2, 1],
        [0, 0],
        [0, 2],
        [2, 1],
        [1, 0],
        [2, 2],
        [1, 0],
        [0, 1]],

       [[0, 2],
        [1, 2],
        [0, 2],
        [1, 2],
        [1, 1],
        [0, 2],
        [2, 1],
        [0, 1],
        [2, 2],
        [1, 2]],

       [[1, 2],
        [0, 2],
        [0, 1],
        [1, 2],
        [1, 2],
        [0, 1],
        [2, 0],
        [0, 0],
        [0, 2],
        [2, 2]]])


houses = np.zeros(12*4*2).reshape(12,4,2)

array([[[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]]])

Вопрос: это вообще реально так сделать? и если да, то через какие методы/инструменты?

Ответы

▲ 1Принят

Если я правильно понял вопрос, то сделать можно так:

import numpy as np
train_3 = np.random.randint(0,2+1,12*10*2).reshape(12,10,2)

np.random.shuffle(train_3)
houses = np.array_split(train_3.reshape(12*10*2), 12*4*2)
houses = np.array([np.sum(x) for x in houses]).reshape(12,4,2)

получите трехмерный массив houses, где в конечных массивах - количество жильцов в первой и второй квартире соответственно.