将列表元素转换为数组
我有一个TSV格式的文件,想把它解析成一个数组。
这个文件的格式是 -
jobname1 queue maphours reducehours
jobname2 queue maphours reducehours
代码
with open(file.tsv) as tsv:
line = [elem.strip().split('\t') for elem in tsv]
vals = np.asarray(line)
print vals[0]
print vals[4]
现在,Vals返回的输出是 -
['job1', 'queue', '1.0', '0.0\n']
['job2', 'queue', '1.0', '0.0\n']
我想把文件中每一行的每个元素都转换成一个数组对象 -
vals[0] = job1 vals[1] = queue vals[2] = 1.0 vals[3] = 0.0
我该怎么做呢?
2 个回答
2
你确定真的需要一个数组吗?如果你想要一个Numpy数组,@Marcin的回答更全面。
Python其实没有数组这种数据结构(你可以在这里看到Python的数据结构列表)。它有一个“围绕C语言数组的薄包装”。要使用这个C语言数组的包装,你需要指定数组要存储的数据类型(在这里你可以找到类型代码的列表,顶部有列表,底部有示例):
如果你想使用numpy数组,这段代码应该可以工作:
import numpy as np
myarray = np.asarray(yourList)
这段代码来自这里。
3
根据我的理解,你想在numpy中创建一个二维数组,文件中的每一行对应数组中的一行,而文件中的每一列对应数组中的一列。如果是这样,你可以按照以下方式操作:
比如,如果你的数据文件是:
jobname1 queue 1 3
jobname2 queue 2 4
jobname41 queue 1 1
jobname32 queue 2 2
jobname21 queue 3 4
jobname12 queue 1 6
那么下面的代码:
with open(file) as tsv:
line = [elem.strip().split('\t') for elem in tsv]
vals = np.asarray(line)
会生成如下的vals
数组:
[['jobname1' 'queue' '1' '3']
['jobname2' 'queue' '2' '4']
['jobname41' 'queue' '1' '1']
['jobname32' 'queue' '2' '2']
['jobname21' 'queue' '3' '4']
['jobname12' 'queue' '1' '6']]
如果你想获取工作名称,可以这样做:
print(vals[:,0])
% gives ['jobname1' 'jobname2' 'jobname41' 'jobname32' 'jobname21' 'jobname12']
或者如果你想要包含某个工作的行,可以这样做:
print(vals[np.apply_along_axis(lambda row: row[0] == 'jobname1', 1, vals)])