Python numpy数组的ArgumentParser

Python numpy数组的ArgumentParser,python,arrays,numpy,argparse,Python,Arrays,Numpy,Argparse,有没有办法为np.array而不是列表向ArgumentParser添加参数? 我知道我可以做这样的事 import argparse parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('-foo', action='store', type=int, nargs='+') args = parser.parse_args(['-foo', '1', '2']) args.foo = np.array(args.f

有没有办法为np.array而不是列表向ArgumentParser添加参数? 我知道我可以做这样的事

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-foo', action='store', type=int, nargs='+')
args = parser.parse_args(['-foo', '1', '2'])
args.foo = np.array(args.foo)
但是我想在解析之前指定参数的完整描述


有什么方法可以做到这一点吗?

要指定
StoreAction
操作处理程序的工作方式有一点变化,您需要创建一个带有适当变化的处理程序的示例(文档的右上方有一个示例


正如我在评论中指出的,“解析前的完整描述”不清楚

但我突然想到,可以使用
argparse
创建一个2d数组。我可以使用
nargs=3
指定3列,并使用
action='append'
收集多个子列表中的输入。当然,
type
指定是int还是float

In [27]: p=argparse.ArgumentParser()

In [28]: p.add_argument('-a',action='append',nargs='+',type=int)
Out[28]: _AppendAction(option_strings=['-a'], dest='a', nargs='+', const=None, default=None, type=<class 'int'>, choices=None, help=None, metavar=None)

In [29]: args=p.parse_args('-a 1 2 3 -a 4 5 6 -a 7 8 9'.split())

In [30]: args
Out[30]: Namespace(a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]])

In [31]: np.array(args.a)
Out[31]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
[27]中的
:p=argparse.ArgumentParser()
在[28]中:p.add_参数('-a',action='append',nargs='+',type=int)
Out[28]:_AppendAction(选项_strings=['-a'],dest='a',nargs='+',const=None,default=None,type=,choices=None,help=None,metavar=None)
在[29]中:args=p.parse_args('-a23-a456-a789'-split())
In[30]:args
Out[30]:名称空间(a=[[1,2,3],[4,5,6],[7,8,9])
In[31]:np.数组(args.a)
出[31]:
数组([[1,2,3],
[4, 5, 6],
[7, 8, 9]])
如果我没有正确的列数,它会抱怨。它不控制的只是行数;但我可以在创建后轻松检查阵列的形状

使用此
append
操作中创建数组是没有意义的。即使使用1d输入,在解析过程中执行
np.array
调用也没有什么好处。解析后对
args
值进行按摩(和测试)是一种非常好的做法


不过,最好将数组值放在CSV文件中,并通过
argparse
指定该文件的名称
argparse
实际上并不适用于输入大量值。它不是一个通用的文件解析器。命令行控制代码的行为。

在哪里指定此
完整描述
?在命令行中,或在
add_参数中
setup?举一个更详细的例子,这正是我想要的。谢谢。我的意思是在将参数添加到ArgumentParser时指定参数的描述(类型、默认值和全部),如@Tadhg所示。
In [27]: p=argparse.ArgumentParser()

In [28]: p.add_argument('-a',action='append',nargs='+',type=int)
Out[28]: _AppendAction(option_strings=['-a'], dest='a', nargs='+', const=None, default=None, type=<class 'int'>, choices=None, help=None, metavar=None)

In [29]: args=p.parse_args('-a 1 2 3 -a 4 5 6 -a 7 8 9'.split())

In [30]: args
Out[30]: Namespace(a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]])

In [31]: np.array(args.a)
Out[31]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])