numpy.savetxt保存新行的每个元素?

时间:2015-11-15 04:44:35

标签: python arrays numpy

with file("features.txt", "w") as outfile:
    # temp_array is an array of shape (500L,)
    np.savetxt(outfile, X=np.array(temp_array, dtype='uint8'), delimiter=",")

我使用上面的语法在文本文件中存储大约10,000个数组,但我注意到所有元素都存储在不同的行上。

如果我使用numpy.loadtxt加载文本文件,我将得到一个数组而不是矩阵。

我知道可以在加载的数组上使用numpy.reshape将其转换为矩阵,但在我的应用程序中,加载它的用户不会知道行数。

如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

如果您给np.savetxt一个数组,它会将所述数组视为一列,并将每个条目写在一个新行上。我可以想到两种解决方法。第一种是在数组中添加一个新轴,使其成为行向量:

x = np.arange(5)
np.savetxt('test.txt', x[np.newaxis], fmt='%d', delimiter=',')

第二种方法是告诉np.savetxt使用除\n之外的其他字符作为换行符。例如,空格:

np.savetxt('test.txt', x, fmt='%d', newline=' ', delimiter=',')

这两个都会导致文件看起来像

0 1 2 3 4

答案 1 :(得分:0)

查看savetxt的代码。这并不复杂。由于您自己打开文件,savetxt的关键部分是:

for row in X:
    fh.write(asbytes(format % tuple(row) + newline))

换句话说,它是采用你的数组,稍微调整它的形状 - 如果需要的话 - 然后逐行地用'row'写'row'。

fmt是您按照列数复制的输入参数:

fmt = [fmt, ] * ncol

如果您对savetxt为您所做的事情不满意,请尝试复制自己写的内容。

如果temp_array已经是一个数组,那么:

X=np.array(temp_array, dtype='uint8')

应该为你做什么?为何X=部分。

您是否也使用该剪辑将多个数组写入文件?我可以理解在附加模式下重复打开文件,或者用一个打开的文件执行多个savetxt

答案 2 :(得分:0)

我发现的最简单的解决方案是制作一个2D数组以封装数据:

np.savetxt(output_file, [[ts, serial, self.__class__.__name__, data]], '%s', delimiter=',')

答案 3 :(得分:0)

我有一个列表,比如说x。因此,如果我想将整个列表存储在一行中但每个元素存储在不同的列中,这对我有用:

with open(file, 'a') as record_append:
    np.savetxt(record_append, [x], delimiter=',', newline='\n', fmt='%6f')