我的文件有k列数字(每列的元素数量相同)。读取它并在单独的numpy.array中保存每列中的数字的最快方法是什么?
答案 0 :(得分:3)
尝试使用genfromtxt
。
这样做的好处是,您可以根据需要指定列名,甚至可以读入recarray
。
我创建了一个文件'tmp':
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
然后从numpy:
import numpy as np
data = np.genfromtxt('tmp')
#array([[ 1., 2., 3., 4., 5.],
# [ 6., 7., 8., 9., 10.],
# [ 11., 12., 13., 14., 15.]])
如果查看help(np.genfromtxt)
,您会看到有各种选项,例如指定自定义dtype
(因此您可以根据需要进行重新排列),设置缺失值的选项,读入列名字等。
答案 1 :(得分:2)
>>> import numpy as np
>>> a = np.loadtxt('yourfile.txt')
>>> print a
[[ 1. 2. 3. 4. 5.]
[ 6. 7. 8. 9. 10.]
[ 11. 12. 13. 14. 15.]]
>>> columns = dict(enumerate(a.T))
>>> columns[0]
array([ 1., 6., 11.])
>>> columns[1]
array([ 2., 7., 12.])
答案 2 :(得分:0)
open()返回一个文件对象,最常用的有两个参数:open(filename,mode)。
f = open('/ tmp / workfile','w') 打印f
第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。当只能读取文件时,模式可以是'r',仅写入的'w'(将删除具有相同名称的现有文件),'a'打开文件以进行追加;写入文件的任何数据都会自动添加到最后。 'r +'打开文件进行读写。 mode参数是可选的;如果省略,则会假设'r'。
在Windows上,附加到模式的'b'以二进制模式打开文件,因此还有'rb','wb'和'r + b'等模式。 Windows上的Python区分了文本和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动稍微改变。这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据。在读取和写入此类文件时要非常小心地使用二进制模式。在Unix上,将'b'附加到该模式并没有什么坏处,因此您可以将它独立于平台用于所有二进制文件。