Как мне использовать argparse для разбора входных данных матрицы? - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в argparse, и я пытаюсь использовать его для ввода 2D-матрицы в одной командной строке (не отдельные входы). Каков наилучший способ ввода 2D-матрицы в argparse?

Я пытался использовать nargs, но это позволяет мне вводить записи только для одной строки чисел.

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-row1', action='store', type=int, nargs='+')
parser.add_argument('-row2', action='store', type=int, nargs='+')
parser.add_argument('-row3', action='store', type=int, nargs='+')
args = parser.parse_args()

Я ожидаю, что пользователь укажет количество строк, и поэтому я не уверен, как использовать приведенный выше код для динамического разрешения пользователю указывать количество строк и их содержимое.

1 Ответ

0 голосов
/ 31 октября 2019

Одним из способов было бы сделать формат аргумента
-nrows nb_rows -matrixdata data_0_0 data_0_1 data_1_0 data_1_1 ...

Тогда вы можете сделать:

import numpy as np
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-matrixdata', action='store', type=int, nargs='+')
parser.add_argument('-nrows', action='store', type=int)
args = parser.parse_args()
m = np.array(args.matrixdata).reshape((args.nrows, len(args.matrixdata)//args.nrows))
print(m)

Что для -nrows 3 -matrixdata 1 2 3 4 5 6 дает:

[[1 2]  
 [3 4]  
 [5 6]]
...