我的Map器的输入是一个txt文件,它的每一行对我来说都是一个向量。我想创建一个numpy数组,其中每一行都是向量。例如:如果我的文本文件是:1 2 39 5 7我想要一个numpy数组:
a=np.array([[1,2,3][9,5,7]])
我有(有没有其他方法…?)一行一行地取回,所以我的问题是:存储它的最佳方式是什么,以便我以最快的方式创建阵列。
lawou6xi1#
np.loadtxt (和 np.genfromtxt )读取这样的文本文件,并生成所需的数组。
np.loadtxt
np.genfromtxt
a = np.loadtxt(filename) # or a = np.loadtxt(filename, dtype=int)
此函数读取每一行,将数字收集到一个列表列表中,并将其转换为末尾的数组。使用这些函数读取csv文本文件有很多问题。 pandas 有一个更快的版本。 loadtxt 接受任何类似文件的输入 readline -也就是说,一次给出一行的迭代器。在交互式会话中,我可以定义一个带三个引号的字符串,将其拆分为行,并将该行列表传递给 loadtxt .
pandas
loadtxt
readline
In [105]: txt="""1 2 3 4 5 6""" In [106]: txt=txt.splitlines() In [107]: np.loadtxt(txt, dtype=int) Out[107]: array([[1, 2, 3], [4, 5, 6]]) ``` `StringIO` 也可以用于此,但真正需要的只是一个简单的字符串列表。你也可以使用 `stdin` :
In [111]: a=np.loadtxt(sys.stdin)0 1 25 6 7
In [112]: aOut[112]:array([[ 0., 1., 2.],[ 5., 6., 7.]])
加载 `a` 以及 `b` 使用不同的列是有效的-只要您使用ctrl d两次。
In [114]: a = np.loadtxt(sys.stdin, usecols=(0,1)); b = np.loadtxt(sys.stdin, usecols=[2])1 2 34 5 6 ^D2 3 4 56 7 8 9 ^D
In [115]: aOut[115]:array([[ 1., 2.],[ 4., 5.]])
In [116]: bOut[116]: array([ 4., 8.])
虽然我怀疑你真的想填补 `a` 以及 `b` 从同一组线。为此,您在加载后拆分了数组
In [117]: ab = np.loadtxt(sys.stdin)1 2 34 5 6
In [118]: abOut[118]:array([[ 1., 2., 3.],[ 4., 5., 6.]])
In [119]: a=ab[:,[0,1]]; b=ab[:,[2]]
In [120]: aOut[120]:array([[ 1., 2.],[ 4., 5.]])
In [121]: bOut[121]:array([[ 3.],[ 6.]])
1条答案
按热度按时间lawou6xi1#
np.loadtxt
(和np.genfromtxt
)读取这样的文本文件,并生成所需的数组。此函数读取每一行,将数字收集到一个列表列表中,并将其转换为末尾的数组。
使用这些函数读取csv文本文件有很多问题。
pandas
有一个更快的版本。loadtxt
接受任何类似文件的输入readline
-也就是说,一次给出一行的迭代器。在交互式会话中,我可以定义一个带三个引号的字符串,将其拆分为行,并将该行列表传递给
loadtxt
.In [111]: a=np.loadtxt(sys.stdin)
0 1 2
5 6 7
In [112]: a
Out[112]:
array([[ 0., 1., 2.],
[ 5., 6., 7.]])
In [114]: a = np.loadtxt(sys.stdin, usecols=(0,1)); b = np.loadtxt(sys.stdin, usecols=[2])
1 2 3
4 5 6 ^D
2 3 4 5
6 7 8 9 ^D
In [115]: a
Out[115]:
array([[ 1., 2.],
[ 4., 5.]])
In [116]: b
Out[116]: array([ 4., 8.])
In [117]: ab = np.loadtxt(sys.stdin)
1 2 3
4 5 6
In [118]: ab
Out[118]:
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
In [119]: a=ab[:,[0,1]]; b=ab[:,[2]]
In [120]: a
Out[120]:
array([[ 1., 2.],
[ 4., 5.]])
In [121]: b
Out[121]:
array([[ 3.],
[ 6.]])