Python numpy genfromtxt列
我在numpy genfromtxt上遇到了一个看似愚蠢而简单的问题。这是我的代码的(非常)简化版本:Python numpy genfromtxt列,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,我在numpy genfromtxt上遇到了一个看似愚蠢而简单的问题。这是我的代码的(非常)简化版本: import numpy as np in_file_1 = raw_input ('enter name of template file to be scaled:\n') spec_1 = np.genfromtxt(in_file_1, delimiter = [8,24], dtype =float) print spec_1 我正在阅读的文件非常简单,两列没有标题等: 6392
import numpy as np
in_file_1 = raw_input ('enter name of template file to be scaled:\n')
spec_1 = np.genfromtxt(in_file_1, delimiter = [8,24], dtype =float)
print spec_1
我正在阅读的文件非常简单,两列没有标题等:
6392.01 0.90286163
6392.05 0.88731778
6392.09 0.87789831
6392.13 0.87716535
6392.16 0.88523003
6392.20 0.90948176
6392.24 0.93056874
6392.28 0.95782283
6392.32 0.98056805
6392.36 0.99623797
6392.39 0.99458828
6392.43 0.9848269
6392.47 0.96011146
6392.51 0.92864767
当我在python命令行上使用genfromtxt阅读上述内容时,它给出了我所期望的两列数组:
>>> import numpy as np
>>> in_file_1 = raw_input ('enter name of template file to be scaled:\n')
enter name of template file to be scaledl_1714650_052_no_head.txt
>>> spec_1 = np.genfromtxt(in_file_1, delimiter = [8,24], dtype =float)
>>> spec_1
array([[ 6.39201000e+03, 9.02861630e-01],
[ 6.39205000e+03, 8.87317780e-01],
[ 6.39209000e+03, 8.77898310e-01],
[ 6.39213000e+03, 8.77165350e-01],
[ 6.39216000e+03, 8.85230030e-01],
[ 6.39220000e+03, 9.09481760e-01],
[ 6.39224000e+03, 9.30568740e-01],
[ 6.39228000e+03, 9.57822830e-01],
[ 6.39232000e+03, 9.80568050e-01],
[ 6.39236000e+03, 9.96237970e-01],
[ 6.39239000e+03, 9.94588280e-01],
[ 6.39243000e+03, 9.84826900e-01],
[ 6.39247000e+03, 9.60111460e-01],
[ 6.39251000e+03, 9.28647670e-01]])
>>>
但当我在本文顶部以脚本(read_test.py)的形式运行它时,它会返回一列字符串:
[scrooge:Acc_cont_removal/All_stars/Test] darryl% python read_test.py
enter name of template file to be scaled:
l_1714650_052_no_head.txt
[[ 6.39201000e+03 9.02861630e-01]
[ 6.39205000e+03 8.87317780e-01]
[ 6.39209000e+03 8.77898310e-01]
[ 6.39213000e+03 8.77165350e-01]
[ 6.39216000e+03 8.85230030e-01]
[ 6.39220000e+03 9.09481760e-01]
[ 6.39224000e+03 9.30568740e-01]
[ 6.39228000e+03 9.57822830e-01]
[ 6.39232000e+03 9.80568050e-01]
[ 6.39236000e+03 9.96237970e-01]
[ 6.39239000e+03 9.94588280e-01]
[ 6.39243000e+03 9.84826900e-01]
[ 6.39247000e+03 9.60111460e-01]
[ 6.39251000e+03 9.28647670e-01]]
[scrooge:Acc_cont_removal/All_stars/Test] darryl%
我已经尝试了各种分隔符的配置,但是我不知道发生了什么,几天前这段代码运行良好。使用PythonV2.7在OSX(Lion)上运行
任何想法都受到了感激。
Darryl你得到的正是你应该得到的答案
>>> numpy.genfromtxt('testfile', delimiter=[8,24], dtype = float)
array([[ 6.39201000e+03, 9.02861630e-01],
[ 6.39205000e+03, 8.87317780e-01],
[ 6.39209000e+03, 8.77898310e-01],
[ 6.39213000e+03, 8.77165350e-01],
[ 6.39216000e+03, 8.85230030e-01],
[ 6.39220000e+03, 9.09481760e-01],
[ 6.39224000e+03, 9.30568740e-01],
[ 6.39228000e+03, 9.57822830e-01],
[ 6.39232000e+03, 9.80568050e-01],
[ 6.39236000e+03, 9.96237970e-01],
[ 6.39239000e+03, 9.94588280e-01],
[ 6.39243000e+03, 9.84826900e-01],
[ 6.39247000e+03, 9.60111460e-01],
[ 6.39251000e+03, 9.28647670e-01]])
>>> print _
[[ 6.39201000e+03 9.02861630e-01]
[ 6.39205000e+03 8.87317780e-01]
[ 6.39209000e+03 8.77898310e-01]
[ 6.39213000e+03 8.77165350e-01]
[ 6.39216000e+03 8.85230030e-01]
[ 6.39220000e+03 9.09481760e-01]
[ 6.39224000e+03 9.30568740e-01]
[ 6.39228000e+03 9.57822830e-01]
[ 6.39232000e+03 9.80568050e-01]
[ 6.39236000e+03 9.96237970e-01]
[ 6.39239000e+03 9.94588280e-01]
[ 6.39243000e+03 9.84826900e-01]
[ 6.39247000e+03 9.60111460e-01]
[ 6.39251000e+03 9.28647670e-01]]
这只是打印和获得结果表示之间的区别
>>> result = numpy.genfromtxt('testfile', delimiter=[8,24], dtype = float)
>>> repr(result)
'array([[ 6.39201000e+03, 9.02861630e-01],\n [ 6.39205000e+03, 8.87317780e-01],\n [ 6.39209000e+03, 8.77898310e-01],\n [ 6.39213000e+03, 8.77165350e-01],\n [ 6.39216000e+03,
8.85230030e-01],\n [ 6.39220000e+03, 9.09481760e-01],\n [ 6.39224000e+03, 9.30568740e-01],\n [ 6.39228000e+03, 9.57822830e-01],\n [ 6.39232000e+03, 9.80568050e-01],\n
[ 6.39236000e+03, 9.96237970e-01],\n [ 6.39239000e+03, 9.94588280e-01],\n [ 6.39243000e+03, 9.84826900e-01],\n [ 6.39247000e+03, 9.60111460e-01],\n [ 6.39251000e+03, 9.2864
7670e-01]])'
>>> str(result)
'[[ 6.39201000e+03 9.02861630e-01]\n [ 6.39205000e+03 8.87317780e-01]\n [ 6.39209000e+03 8.77898310e-01]\n [ 6.39213000e+03 8.77165350e-01]\n [ 6.39216000e+03 8.85230030e-01]\n [ 6.39220000e+03
9.09481760e-01]\n [ 6.39224000e+03 9.30568740e-01]\n [ 6.39228000e+03 9.57822830e-01]\n [ 6.39232000e+03 9.80568050e-01]\n [ 6.39236000e+03 9.96237970e-01]\n [ 6.39239000e+03 9.94588280e-01]\n [
6.39243000e+03 9.84826900e-01]\n [ 6.39247000e+03 9.60111460e-01]\n [ 6.39251000e+03 9.28647670e-01]]'
请注意,str版本没有逗号,而repr有逗号?看起来不像一列字符串。事实上,它看起来几乎与正确的输出相同。但是当我引用它时,即:a=spec_1[0:1]它不返回值,我可以引用行(即a=spec[1]),它返回整行,但不返回单个元素。
spec_1[1]
应该返回整行,如果需要单个元素,可以使用spec_1[1,0]
,spec_1[2,1]
等。此外,如果在test_read.py
的末尾添加print spec_1.dtype、spec_1.shape
,您会得到什么输出?我得到float64(14,2)
。