Вставить матрицу Python в другую матрицу - PullRequest
0 голосов
/ 09 января 2019

Что я хочу сделать, это вставить матрицу (из str) в другую матрицу.

HM = 
[['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', '']]
B = [["AA", "BB"],["CC","DD"]]
offset = (1,2)

Результат должен быть:

[['', '', '', '', ''],
 ['', '', 'AA', 'BB', ''],
 ['', '', 'CC', 'DD', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', ''],
 ['', '', '', '', '']]

работает на ноутбуке jupyter версии 3.7, пробовал np.insert, пробовал HM + B, пробовал np slash

HM = [[""]*15]*10
B = [["BBB"]*3, ["CCC"]*3, ["DDD"]*3]
offsetx = 2
offsety = 1
for x in range(1, 1 + offsetx):
    for y in range(2, 2 + offsety):
        HM[x][y] = B[x][y] 
HM

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Доступ к элементу по элементу с индексом в двойном цикле for.

Учитывая матрицу:

HM = [['', '', '', '', ''],
      ['', '', '', '', ''],
      ['', '', '', '', ''],
      ['', '', '', '', ''],
      ['', '', '', '', ''],
      ['', '', '', '', ''],
      ['', '', '', '', '']]

Вы можете вставить подматрицу таким образом, например:

B = [["AA", "BB"],["CC","DD"]]
offset = (1,2)

for x, row in enumerate(B):
  for y, e in enumerate(row):
    HM[x + offset[0]][y + offset[1]] = e

for row in HM:
  print(row)

# ['', '', '', '', '']
# ['', '', 'AA', 'BB', '']
# ['', '', 'CC', 'DD', '']
# ['', '', '', '', '']
# ['', '', '', '', '']
# ['', '', '', '', '']
# ['', '', '', '', '']
0 голосов
/ 12 января 2019

Мне не удалось решить проблему с использованием больших матриц (с использованием матриц 20x20 и 5x6), как в первом утверждении. В итоге я использовал 3 матрицы - дополнительный массив np.array для переключения доступа между первыми двумя. Все остальные решения не сработали - imho, есть серьезная ошибка, которая должна быть устранена, но это покажет некоторые «исследовательские усилия» ...

0 голосов
/ 09 января 2019

Вы можете использовать понимание списка:

HM = [['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', '']]
B, offset = [["AA", "BB"],["CC","DD"]], (1, 2)
_b = iter(B)
new_data = [a[:offset[-1]]+(lambda x:x+a[len(x)+offset[-1]:])(next(_b)) if offset[0] <= i <= (offset[0]+len(offset)-1) else a 
    for i, a in enumerate(HM)]

Выход:

[['', '', '', '', ''], 
 ['', '', 'AA', 'BB', ''], 
 ['', '', 'CC', 'DD', ''], 
 ['', '', '', '', ''], 
 ['', '', '', '', ''], 
 ['', '', '', '', ''], 
 ['', '', '', '', '']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...