Вы можете сделать это, используя списки:
A = [[ 0, 1, 0, 1, 1, 1, 0, 0],
[ 0, 0, 1, 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, -1, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, -1, 1],
[ 0, 0, 0, 0, 0, 0, -1, 1],
[ 0, 0, 0, 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 0, 0, 0, 1],
[-1, 0, 0, 0, 0, 0, 0, 0]]
P = [ [max(0,v) for v in line] for line in A]
N = [ [min(0,v) for v in line] for line in A]
for line in P: print(line)
[0, 1, 0, 1, 1, 1, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0]
for line in N: print(line)
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, -1, 0, 0, 0]
[0, 0, 0, 0, 0, 0, -1, 0]
[0, 0, 0, 0, 0, 0, -1, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[-1, 0, 0, 0, 0, 0, 0, 0]
Вы можете добавить N и P вместе следующим образом:
NP = [ [n+p for n,p in zip(lineN,lineP)] for lineN,lineP in zip(N,P) ]
NP == A # True
for line in NP: print(line)
[0, 1, 0, 1, 1, 1, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 1, -1, 0, 0, 0]
[0, 0, 0, 0, 0, 0, -1, 1]
[0, 0, 0, 0, 0, 0, -1, 1]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
[-1, 0, 0, 0, 0, 0, 0, 0]
Примечание: Вы также можете посмотретьв модуль NumPy.Он делает такие вещи намного быстрее и элегантнее.
import numpy as np
A = np.array( [[ 0, 1, 0, 1, 1, 1, 0, 0],
[ 0, 0, 1, 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, -1, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, -1, 1],
[ 0, 0, 0, 0, 0, 0, -1, 1],
[ 0, 0, 0, 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 0, 0, 0, 1],
[-1, 0, 0, 0, 0, 0, 0, 0]])
P = np.maximum(0,A)
N = np.minimum(0,A)
print(P)
[[0 1 0 1 1 1 0 0]
[0 0 1 0 0 0 0 0]
[0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 0]]
print(N)
[[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 -1 0 0 0]
[ 0 0 0 0 0 0 -1 0]
[ 0 0 0 0 0 0 -1 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[-1 0 0 0 0 0 0 0]]
Добавление кучных массивов (матриц) вместе сродни сложению регулярных скалярных переменных:
print(P+N)
[[ 0 1 0 1 1 1 0 0]
[ 0 0 1 0 0 0 0 0]
[ 0 0 0 1 -1 0 0 0]
[ 0 0 0 0 0 0 -1 1]
[ 0 0 0 0 0 0 -1 1]
[ 0 0 0 0 0 0 1 0]
[ 0 0 0 0 0 0 0 1]
[-1 0 0 0 0 0 0 0]]