将列表元素转换为数组

c0vxltue  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(365)

我有一个列表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]

VAL当前返回以下输出-

['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

我如何做到这一点?

vojdkbi0

vojdkbi01#

据我所知,您希望在numpy中创建2d数组,其中文件的每一行都是与创建的数组相对应的行,文件中的列是数组中的列。如果是这样,您可以按以下步骤进行:
例如,如果数据文件是:

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)])
wpcxdonn

wpcxdonn2#

你确定需要数组吗@如果你想要一个numpy数组,marcin的答案更完整。
python没有数组数据结构(这里有python数据结构列表)。在c数组周围有一个“薄 Package 器”。为了在c数组周围使用 Package 器,您必须指定数组将容纳的类型(在这里您可以在顶部找到类型代码列表,在底部找到示例):
如果要使用numpy数组,这应该可以:

import numpy as np
myarray = np.asarray(yourList)

从这里领养的。

相关问题