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
将其转换为矩阵,但在我的应用程序中,加载它的用户将不知道行数。
如何解决这个问题?
发布于 2015-11-15 13:18:49
如果你给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
发布于 2015-11-15 13:51:01
看看savetxt
的代码。这并不复杂。由于您是自己打开该文件,因此savetxt
的关键部分是:
for row in X:
fh.write(asbytes(format % tuple(row) + newline))
换句话说,它接受你的数组,稍微调整一下它的形状--如果需要的话--然后逐行“逐行”地写下它。
fmt
是由列数复制的输入参数:
fmt = [fmt, ] * ncol
如果你对savetxt
为你做的事情不满意,你可以试着自己复制这篇文章。
如果temp_array
已经是一个数组,那么是什么:
X=np.array(temp_array, dtype='uint8')
应该为你做些什么?为什么是X=
部分。
另外,您是否使用该剪辑将许多数组写入到文件中?我可以理解重复地在追加模式下打开一个文件,或者在一个打开的文件中执行多个savetxt
。
发布于 2019-08-28 17:54:20
我找到的最简单的解决方案是创建一个包含数据的2D数组:
np.savetxt(output_file, [[ts, serial, self.__class__.__name__, data]], '%s', delimiter=',')
https://stackoverflow.com/questions/33716509
复制相似问题