I have a matrix that I want to mutate using the propigate()
function. It takes the mappp
matrix and pretty much makes a mutation of it if certain conditions are me within each row. This is a function that I built to find relationships amount the elements of the matrix. That's not important to the issue. So when I pass in my starting matrix, I expect propigate()
to spit out a mutated function, but leave the starting function unchanged. I thought I took care of mutations with copy() after I checked for places where I may have mutated the starting matrix on accident. I cant see where my mistake is, but I feel that I may have something to do with how I am using enumerate here.
mappp
is a matrix that relates rows to each other by the value in each rows column 0 means the associated,
1 means that the row is close by, -1 means that the rows have no idea about each other. After running propigate()
each zero expands to its neighbor ( those entries with 1) then I multiply that row by -1 and its close neighbors. It's a lot to explain, hopefully I'm missing something simple here.
THE STARTING MATRIX THAT I DON'T WANT TO MUTATE
mappp = [[0,-1,1,1,-1],
[-1,0,1,-1,1],
[1,1,0,-1,-1],
[1,-1,-1,0,-1],
[-1,1,-1,-1,0]
]
PROPIGATE THAT CHANGES MY mappp
def propigate(matrix):
mapp1degree = matrix.copy()
for idy, row in enumerate(mapp1degree):
holder = []
for idx, element in enumerate(row):
if element == 1:
mapp1degree[idy][idx] = 0
holder.append(idx)
print(holder)
for i in holder:
mapp1degree[idy] = add_twoList([-1 * x for x in mapp1degree[-1]], mappp[i])
return mapp1degree
BOILER PLATE TO ADD TWO LISTS
def add_twoList(L1, L2):
res_lt = [] # declaration of the list
for x in range(0, len(L1)):
res_lt.append(L1[x] * L2[x])
EXPECTED OUT PUT SHOULD BE
propigate(mappp)
[[0,1,0,0,-1],[1,0,0,-1,0],[0,0,0,1,1],[0,-1,1,0,-1],[-1,0,1,-1,0]]
I tried using copy() on the passed in matrix but that didn't help, and I even tried using the variable from outside the function.