我知道Matlab有一些很好的语法,你可以在其中放入文件数组定义,比如A = [[1,2,3],...
,然后你可以导入那个文件,所有这些定义都会自动读取。我想在Python中做一些类似的事情。基本上,我正在寻找从文件中读取表格数据的最简单方法,并将结果对象作为numpy数组实例。最简单的方法是什么?(或最python的方式?)
假设文件中的数据如下所示:
Array1
1 0 0 0
2 1 0 0
3 0.3333333333325028 0 0
4 0.6666666666657888 0 0
Array2
1 1 1 1
2 3 1 1
3 2 2 2
4 3 2 2
5 1 1 3
6 1 3 4
7 1 4 2
文件 test1.py :
#!/usr/bin/python
a=[1,2,3,4,5,6]
文件 test.py :
#!/usr/bin/python
import test1
print test1.a
现在如果运行test.py:
$ ./test.py
[1, 2, 3, 4, 5, 6]
如果你想把你的数据放在Python模块中,Jahid下面说的很好。
另一方面,如果你宁愿把你的数据放在一个单独的文件,例如一个文本文件,然后在一个脚本中读取它,你可能想要使用numpy.loadtxt
(它被设计成自动读取矩阵类文件到numpy数组)。
您可能希望将数据放在yaml文件格式中。它是一种文本数据格式,其结构基于Python等高级脚本语言。您可以在其中放入任意类型的多个2D数组。然而,由于它只是数据,而不是代码,所以它不像将数据直接放在Python脚本中那么危险。它可以很容易地创建2D数组,或者更严格的嵌套列表(具体参见示例2.5中的链接),以及普通列表、字典、嵌套字典、字符串和它们的任何组合的等价物。因为您可以将一种数据类型嵌套到另一种数据类型中,因此您可以拥有一个2D数组字典,例如,它允许您将多个数组放入单个文件中。
下面是你在yaml中的例子:
Array1:
- [1, 0, 0, 0]
- [2, 1, 0, 0]
- [3, 0.3333333333325028, 0, 0]
- [4, 0.6666666666657888, 0, 0]
Array2:
- [1, 1, 1, 1]
- [2, 3, 1, 1]
- [3, 2, 2, 2]
- [4, 3, 2, 2]
- [5, 1, 1, 3]
- [6, 1, 3, 4]
- [7, 1, 4, 2]
下面是如何使用PyYaml包将其读入numpy数组(在我的示例中该文件称为"temp.yaml"):
>>> import yaml
>>>
>>> with open('temp.yaml') as ym:
.... res = yaml.load(ym)
>>> res
{'Array1': [[1, 0, 0, 0],
[2, 1, 0, 0],
[3, 0.3333333333325028, 0, 0],
[4, 0.6666666666657888, 0, 0]],
'Array2': [[1, 1, 1, 1],
[2, 3, 1, 1],
[3, 2, 2, 2],
[4, 3, 2, 2],
[5, 1, 1, 3],
[6, 1, 3, 4],
[7, 1, 4, 2]]}
>>> array1 = np.array(res['Array1'])
>>> array2 = np.array(res['Array2'])
>>> print(array1)
[[ 1. 0. 0. 0. ]
[ 2. 1. 0. 0. ]
[ 3. 0.33333333 0. 0. ]
[ 4. 0.66666667 0. 0. ]]
>>> print(array2)
[[1 1 1 1]
[2 3 1 1]
[3 2 2 2]
[4 3 2 2]
[5 1 1 3]
[6 1 3 4]
[7 1 4 2]]