Добавление дополнительного столбца из другой матрицы - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть две матрицы:

A = [[2, 7, 3, 6], [3, 3, 4, 4], [6, 9, 5, 3], [4, 2, 1, 7]]
B = [[2, 6, 3, 5], [-1, 2, -3, 1], [2, -5, 7, 3]]

Мне нужно создать три матрицы A + 1-й столбец B и т. Д.

Поэтому мне нужен этот конечный результат:

A1 = [[2, 7, 3, 6, 2], [3, 3, 4, 4, 6], [6, 9, 5, 3, 3], [4, 2, 1, 7, 5]]
A2 = [[2, 7, 3, 6, -1], [3, 3, 4, 4, 2], [6, 9, 5, 3, -3], [4, 2, 1, 7, 7]]
A3 = [[2, 7, 3, 6, 2], [3, 3, 4, 4, -5], [6, 9, 5, 3, 7], [4, 2, 1, 7, 3]]

Я начинаю делать следующий код, но у меня есть только один из них

for j in range(len(B)):    
    for i in range(j):
        b = B[j][i]
        A = [x + [b] for x in A]
    print(A)

Вывод:

[[2, 7, 3, 6], [3, 3, 4, 4], [6, 9, 5, 3], [4, 2, 1, 7]]
[[2, 7, 3, 6, -1], [3, 3, 4, 4, -1], [6, 9, 5, 3, -1], [4, 2, 1, 7, -1]]
[[2, 7, 3, 6, -1, 2, -5], [3, 3, 4, 4, -1, 2, -5], [6, 9, 5, 3, -1, 2, -5], [4, 2, 1, 7, -1, 2, -5]]

Процесс завершен с кодом выхода 0

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Обязательно используйте глубокую копию, чтобы они не все ссылались на один и тот же объект.

A = [[2, 7, 3, 6], [3, 3, 4, 4], [6, 9, 5, 3], [4, 2, 1, 7]]
B = [[2, 6, 3, 5], [-1, 2, -3, 1], [2, -5, 7, 3]]

from copy import deepcopy
A_list = [deepcopy(A) for i in range(3)]

for outer_idx, list_in_b in enumerate(B):
    for inner_idx, value in enumerate(list_in_b):
        A_list[outer_idx][inner_idx].append(value)

print(A_list)

# Output:
#[[[2, 7, 3, 6, 2], [3, 3, 4, 4, 6], [6, 9, 5, 3, 3], [4, 2, 1, 7, 5]],
# [[2, 7, 3, 6, -1], [3, 3, 4, 4, 2], [6, 9, 5, 3, -3], [4, 2, 1, 7, 1]],
# [[2, 7, 3, 6, 2], [3, 3, 4, 4, -5], [6, 9, 5, 3, 7], [4, 2, 1, 7, 3]]]
0 голосов
/ 11 февраля 2019

Это возможное решение, с которого вы, безусловно, можете начать:

k = len(A)
D = []
for i in range(len(B)):
    D.append([])
    for j in range(len(A)):
        C = A[j][:k]
        C.append(B[i][j])
        D[i].append(C)
0 голосов
/ 11 февраля 2019

Вы можете использовать enumerate () , чтобы получить вывод:

A = [[2, 7, 3, 6], [3, 3, 4, 4], [6, 9, 5, 3], [4, 2, 1, 7]]
B = [[2, 6, 3, 5], [-1, 2, -3, 1], [2, -5, 7, 3]]

AA ={}
for idx,inner in enumerate(B):

    # add to each a from A the k-th elem of your inner
    AA[f"A{idx}"] = [a +[inner[k]] for k,a in enumerate(A)]

print(AA) # stored the lists into a dict


{'A0': [[2, 7, 3, 6, 2], [3, 3, 4, 4, 6], [6, 9, 5, 3, 3], [4, 2, 1, 7, 5]], 
 'A1': [[2, 7, 3, 6, -1], [3, 3, 4, 4, 2], [6, 9, 5, 3, -3], [4, 2, 1, 7, 1]], 
 'A2': [[2, 7, 3, 6, 2], [3, 3, 4, 4, -5], [6, 9, 5, 3, 7], [4, 2, 1, 7, 3]]}

В качестве личного предпочтения я избегаю использовать range(len(...)), где я могу - enumerate чище.


Если строковые литералы у вас не работают, используйте "A{}".format(idx).


Ваш код не работает, потому что вы связали диапазон от i до j

for j in range(len(B)):     # j starts as 0,1,2  
    for i in range(j):      # i is doing nothing, 0, 0+1  <-- wrong
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...