【发布时间】:2014-01-07 09:30:42
【问题描述】:
我想从文件myfile 中将数据读入一个数组,该数组的开头包含一个我打算忽略的字符串。像这样的东西:-
"myfile", 1.0, 2.0, 3.0
,4.0, 5.0, 6.0
这是代码:-
def func(filename):
with open(filename) as fp
line = next(fp).split(',')
yield ','.join(line[1:])
for line in fin:
yield line
arr = np.genfromtxt(func('myfile'), delimiter=',')
我得到一个例外:-
Line #2 (got 4 columns instead of 3)
我觉得奇怪的是,如果我的数据看起来像这样,
"myfile", 1.0, 2.0, 3.0, 4.0
,5.0, 6.0, 7.0
我明白了
array([[ 1., 2., 3., 4.],
[ nan, 4., 5., 6.]])
谁能解释这里发生了什么?
【问题讨论】:
-
第二行是
4.0, 5,0, 6,0还是4.0, 5.0, 6.0? -
一个错字。我改正了
-
第二行中仍有 4 个元素(
4.0、5.0、6和0)——这解释了错误消息。 Numpy 期望每一行包含相同数量的元素。你的第一行有 3 个元素,你的第二行有 4 个。 -
为什么要迭代
fin而不是fp? -
@AdaXu -- 在你最后一次编辑之后,代码对我有用......至于第二个例子工作的原因 -- numpy 似乎在你的文件中期待 4 列数据,因为那是数字第一行中的元素。当它处理具有较少元素的第二行时,它使用
nan填充。换句话说,行需要与第一行具有相同数量或更少的列。如果小于,则会用nan填充。