转换水平数据并保存它们

2024-06-25 07:00:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的代码,它的想法是打开一个6列的文件,选择一列并保存它。我面临的问题是我不断地获取水平排列的数据。当我试图转置它们时,我得到了一个更奇怪的输出,看起来像

[number1, number2, number3, ..., number4, number5, number6]

虽然一栏有一百万分。我怎样才能避开这个问题?在

^{pr2}$

Tags: 文件数据代码水平pr2number1number2number5
3条回答

与使用np.transpose(这是1D数据的no-op)不同,您只需在将维度转换为数组后添加一个维度:

tr = np.array(col_1)[:, None]  # instead of "tr = np.transpose(col_1)"

例如:

^{pr2}$

还有其他几种改进代码的方法,但是这种更改应该可以解决问题。:)

例如,^{}可用于以更直接的方式提取列:

# to extract the fifth column of a csv file:
tr = np.loadtxt(filename, delimiter=col_sep, comments='#')[:, 4][:, None]  

file.write('\n'.join([str(_) for _ in col_1]) + '\n')可能对你有用。在

顺便说一下,numpy.ndarray对象不能直接写入文件,请尝试numpy.savetxt()。在

所以,您试图从一个文件中提取一列并将其保存到另一个文件中?在

这应该做到:

filename = "C:\\Users\\blablabla.dat"
col_sep = "\t"

col_1 = []
with open(filename, 'r') as f:
    for line in f:
        if line[0] != "#":
            col_1.append(float(line.split(col_sep)[4]))

with open("C:\\Users\\blablabla1.dat", "w") as f:
    for val in col_1:
        f.write("%f\n" % val)

程序中名为col_1list没有附加方向,既不是水平的,也不是垂直的;它只是一个值的列表。您将使用特定列中的值填充它,逐行读取文件并手动解析。要将其保存为列,必须以相同的方式迭代它,并每行写入一个值。在

另外,为了让大家明白到底发生了什么;np.transpose对一维数据什么也没做,只需返回一个np.array(向量),其中包含来自list的数据。^上的{}返回了该array的可读字符串表示形式,并将其写入输出文件。在

相关问题 更多 >