Ask Your Question
1

How to define a matrix conditional to a list of strings

asked 2022-02-26 17:00:10 +0100

Cyrille gravatar image

updated 2022-02-26 19:13:42 +0100

Need a little help. suppose I have the following list :

signs=['=','=','>=','>=','>=','<=','<=','<=','<=','<=']

with this list I need to create in Sagemath a matrix with 10 lines and 18 columns each equality/inequality sign correspond to a line with

'=' gives 1 on the corresponding line the other 17 enters being 0
'>=' gives - 1, 1 on the corresponding line the other 16 enters being 0
'<=' gives 1, 1 on the corresponding line the other 16 enters being 0

and of course, there is only one 1 (-1) in each column.

What I want is a function. Someone will tell me that I must learn Python (smile) but each of my tentatives fails.

Thank in advance for the help

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2022-02-26 17:41:33 +0100

How about this:

signs = ['=','=','>=','>=','>=','<=','<=','<=','<=','<=']
# lines: will be the rows of the matrix
lines = []
# column: where to put the next nonzero entry
column = 0
# total number of columns in matrix
size = sum(len(s) for s in signs)
for s in signs:
    if s == '=':
        new = column * [0] + [1] + (size - column - 1) * [0]
        column += 1
    elif s == '>=':
        new = column * [0] + [-1, 1] + (size - column - 2) * [0]
        column += 2
    elif s == '<=':
        new = column * [0] + [1, 1] + (size - column - 2) * [0]
        column += 2
    lines.append(new)
mat = matrix(lines)
edit flag offensive delete link more
1

answered 2022-02-26 19:32:46 +0100

Max Alekseyev gravatar image

In a compact form:

signs = ['=','=','>=','>=','>=','<=','<=','<=','<=','<=']
shift = [sum(len(signs[i]) for i in range(j)) for j in range(len(signs))]
Matrix(ZZ, 10, 18, lambda i,j: 0 if j<shift[i] or j>shift[i]+1 else -1 if j==shift[i] and signs[i]=='>=' else 0 if j==shift[i]+1 and signs[i]=='=' else 1)
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2022-02-26 17:00:10 +0100

Seen: 271 times

Last updated: Feb 26 '22