Pregunta ¿Cómo restar matriz multidimensional en Python?


Tengo esta matriz multidimensional:

n = [[1], [2], [3], [4], [5], [6], [7, 10], [8], [9], [7, 10]]

Quiero restarlas todas con 1. Entonces el resultado será:

result = [[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]

5
2018-04-13 02:54


origen


Respuestas:


Si tiene una lista de listas de seguro, use una lista de comprensión anidada:

In [13]: result = [[e-1 for e in i] for i in n]

In [14]: print result
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]

4
2018-04-13 02:57



for x in n:
    for i, y in enumerate(x):
        x[i] = y - 1

Esto es más eficiente, al menos en el espacio.

o si desea utilizar la comprensión de listas anidadas como hizo zhangxaochen, pero asigne el mismo valor para que lo haga en su lugar:

n[:] = [[b - 1 for b in a] for a in n]

Tenga en cuenta que esto todavía crea dos listas adicionales, por lo que tiene la misma complejidad de espacio que asignarlo a una nueva matriz.


2
2018-04-13 02:57



result=n
for a in range(len(n)):
    for b in range(len(n[a])):
        result[a][b]=n[a][b]-1

1
2018-04-13 03:03



O puedes usar map():

>>> import operator
>>> n = [[1], [2], [3], [4], [5], [6], [7, 10], [8], [9], [7, 10]]
>>> map(lambda x: map(lambda y: operator.sub(y, 1), x), n)
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]

1
2018-04-13 03:04



def difference(a, n):
    try:
        return a - n
    except TypeError:
        return [difference(i, n) for i in a]

>>> difference([[1], [2], [3], [4], [5], [6], [7, 10], [8], [9], [7, 10]], 1)
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]
>>> difference([3, [1, 9, [1, 2, [3, 4, [5, 6]]]], [2], [[3, 4], [5, 6]], [3], [7, 10]], 1)
[2, [0, 8, [0, 1, [2, 3, [4, 5]]]], [1], [[2, 3], [4, 5]], [2], [6, 9]]

Funciona para todas las listas multidimensionales.


1
2018-04-13 03:21