Вставка столбцов в массивы numpy на основе логического массива

#python #arrays #numpy #indexing #slice

#python #массивы #numpy #индексирование #срез

Вопрос:

Прошу прощения, если на этот вопрос есть элементарный ответ, но я пока не смог его найти.

У меня есть некоторые данные, которые изначально были numpy массивом shape (N, M) , но где определенные столбцы затем были удалены. Для иллюстрации допустим M=6 , и 2 столбца, где они удалены, оставляя (N, 4) массив. У меня также есть массив, обозначающий, был ли сохранен столбец или нет с логическим значением ( True если сохранен, False если нет), например array([False, True, True, False, True, True]) .

Что я хотел бы сделать, так это восстановить (N, 6) массив из (N, 4) массива и логических маркеров, при этом столбцы будут повторно введены с правильным индексом (заполнены нулями).

Любая помощь в отношении необходимых подходов к нарезке и т. Д. Была Бы оценена!

Комментарии:

1. Вы должны иметь возможность создать новый массив np.insert , используя [0, 3] позиции вставки в качестве аргумента. Но прочитайте его документы. Но нетрудно создать новый массив напрямую.

Ответ №1:

Давайте попробуем это:

 # original array -- for references only
arr = np.arange(12).reshape(-1,6)

# keep indexes
keep = np.array([False,  True,  True,  False,  True,  True])

# array after removing the columns
removed_arr = arr[:,keep]

# output array
out = np.zeros((removed_arr.shape[0], len(keep)), dtype=removed_arr.dtype)

# copy the values of `removed_arr` to output
out[:, keep] = removed_arr
  

Вывод:

 array([[ 0,  1,  2,  0,  4,  5],
       [ 0,  7,  8,  0, 10, 11]])