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
将其转换为矩阵,但在我的应用程序中,加载它的用户不会知道行数。
如何解决这个问题?
答案 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')