2015-05-25 5 views
1

У меня есть 2d Numpy массива, например:Заменять части некоторых строк Numpy массива с участками других строк

[[1, 2, 3, 4, 5 ] 
[6, 7, 8, 9, 10] 
[11,12,13,14,15] 
[16,17,18,19,20] 
[21,22,23,24,25] 
[26,27,28,29,30]] 

Я хочу, чтобы переписать части некоторых строк с частями других строк. Например, я хочу переписать второе и третье значение 1-й строки со вторым и третьим значением 0-й строки. Строки могут быть только «донором» или «получателем», а не обоими.

Как я это установил до сих пор, у меня есть 1D-массив, обозначающий определенные строки как «доноры», например.

`donors = np.array([0,2]) 

и 1D-массив, обозначающий определенные строки в качестве получателей, например.

`recips = np.array([1,3]) 

и массив, определяющий позиции для перезаписи, например.

`positions_to_overwrite = np.array([2,3],[3,4]]) 

Так что я бы хотел, чтобы это произошло здесь в том, что 2-й и 3-й величины (считая от нуля) в строке 1 заменяются 2-го и 3-го ряда значений 0, а 3-й и 4-й величины строка 3 перезаписываются 3-го и 4-го значения ряда 2. Это дало бы мне:

[[1, 2, 3, 4, 5 ] 
[6, 7, 3, 4, 10] 
[11,12,13,14,15] 
[16,17,18,14,15] 
[21,22,23,24,25] 
[26,27,28,29,30]] 

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

ответ

0

Один подход предполагая A как массив 2D ввода -

A[recips[:,None],positions_to_overwrite] = A[donors[:,None],positions_to_overwrite] 

Немного объяснения: Каждая строка представляет positions_to_overwrite индексы столбцов donors и recips. Теперь как donors, так и recips представляют собой индексы строк, которые нужно манипулировать. Итак, нам нужно преобразовать как donors, так и recips в векторы столбцов, так что каждый элемент из них будет соответствовать каждой строке positions_to_overwrite. Это похоже на «трансляцию», но для целей индексирования.

+0

Спасибо! Это была «[:, None]» часть, которая отсутствовала в моих попытках. Что преобразует 1D-массив в 2D-массив с одним столбцом? –

+0

@BenS. Добавлено несколько комментариев, чтобы помочь. – Divakar

Смежные вопросы