我可以用numpy传递一个矩阵作为命令行输入吗?

2024-04-18 14:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个简单的程序,让我进入康威人生游戏的下一步,使用numpy。 现在,我能做的就是改变程序中的1和0:

seed = np.array([[0,0,0,0],[0,1,1,0],[0,1,1,1],[0,0,0,0]])  
print(nextStep(seed))

但我希望能够在命令行中传递初始数组。有什么办法吗?在


Tags: 命令行程序numpy游戏np数组arrayseed
3条回答

eval可以做到:

python myprogram.py "[[0,0,0,0],[0,1,1,0],[0,1,1,1],[0,0,0,0]]"

python代码:

^{pr2}$

基本上,您需要的是将文本转换为结构化数据(这里是numpy数组)。因为手动操作(如拆分字符串或使用eval)充满了错误和安全漏洞,所以我建议使用一个库来为您进行解析。在

这里我认为json是最自然的格式。示例用法

import json
import numpy
import sys

data = numpy.array(json.loads(sys.argv[1]))
# do you calculation

现在可以在命令行上运行了

^{pr2}$

如果你想写

$ python life.py 0101010,0101010,0101010

然后需要来自sys模块的argv向量,它包含命令行中的所有元素,然后是一个简单的列表理解 将第一个参数拆分为逗号,从而得到矩阵的rows(注意这些行是字符串),然后构建一个子列表,转换一行中的每个字符

^{pr2}$

为了详细说明这个过程,使用一个辅助变量来代替argv[1]

In [46]: m = '0101010,0101010,0101010'

In [47]: [r for r in m.split(',')]
Out[47]: ['0101010', '0101010', '0101010']

In [48]: [[c for c in r] for r in m.split(',')]
Out[48]: 
[['0', '1', '0', '1', '0', '1', '0'],
 ['0', '1', '0', '1', '0', '1', '0'],
 ['0', '1', '0', '1', '0', '1', '0']]

In [49]: [[int(c) for c in r] for r in m.split(',')]
Out[49]: [[0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0]]

In [50]: np.array([[int(c) for c in r] for r in m.split(',')])
Out[50]: 
array([[0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0]])

In [51]: 

相关问题 更多 >