Juicce
Juicce

Reputation: 33

Change square matrix in diagonal without numpy - Python

I have some data:

values = [2.1254,0.0125,1.3542,0.2543]
residuals = [0.0251,0.0005,0.1223,0.0043]

then I created a matrix:

matrix = [[i] * len(values) for i in values]

and now I would like to add up the residuals vector to diagonal in matrix. I tried:

def fc(x)
    for i in range(len(values)):
        x[i][i] + residuals[i]

but I do not know how to return a result.

print(fc(matrix))

returns None

This is desired matrix:

matrix1 = [[2.1505,2.1254,2.1254,2.1254],
[0.0125,0.013,0.0125,0.0125,
[1.3542,1.3542,1.4765,1.3542]
[0.2543,0.2543,0.2543,0.2586]]

Upvotes: 2

Views: 331

Answers (1)

jpp
jpp

Reputation: 164703

This is one way using a list comprehension and enumerate:

values = [2.1254,0.0125,1.3542,0.2543]
residuals = [0.0251,0.0005,0.1223,0.0043]

def fc(values, residuals):
    n = len(values)
    res = [[i]*n for i in values]
    for idx, j in enumerate(residuals):
        res[idx][idx] += j
    return res

res = fc(values, residuals)

Result:

[[2.1505, 2.1254, 2.1254, 2.1254],
 [0.0125, 0.013, 0.0125, 0.0125],
 [1.3542, 1.3542, 1.4765, 1.3542],
 [0.2543, 0.2543, 0.2543, 0.2586]]

Upvotes: 1

Related Questions