首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >numpy.savetxt是否将每个元素都保存到新行?

numpy.savetxt是否将每个元素都保存到新行?
EN

Stack Overflow用户
提问于 2015-11-15 12:44:35
回答 4查看 9.8K关注 0票数 3
代码语言:javascript
运行
复制
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将其转换为矩阵,但在我的应用程序中,加载它的用户将不知道行数。

如何解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2015-11-15 13:18:49

如果你给np.savetxt一个一维的数组,它会把这个数组当作一列,并把每一项都写到一个新的行上。我可以想出两种方法来解决这个问题。第一种方法是向数组中添加一个新的轴,使其成为行向量:

代码语言:javascript
运行
复制
x = np.arange(5)
np.savetxt('test.txt', x[np.newaxis], fmt='%d', delimiter=',')

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

代码语言:javascript
运行
复制
np.savetxt('test.txt', x, fmt='%d', newline=' ', delimiter=',')

这两种方法都会生成一个如下所示的文件

代码语言:javascript
运行
复制
0 1 2 3 4
票数 7
EN

Stack Overflow用户

发布于 2015-11-15 13:51:01

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

代码语言:javascript
运行
复制
for row in X:
    fh.write(asbytes(format % tuple(row) + newline))

换句话说,它接受你的数组,稍微调整一下它的形状--如果需要的话--然后逐行“逐行”地写下它。

fmt是由列数复制的输入参数:

代码语言:javascript
运行
复制
fmt = [fmt, ] * ncol

如果你对savetxt为你做的事情不满意,你可以试着自己复制这篇文章。

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

代码语言:javascript
运行
复制
X=np.array(temp_array, dtype='uint8')

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-08-28 17:54:20

我找到的最简单的解决方案是创建一个包含数据的2D数组:

代码语言:javascript
运行
复制
np.savetxt(output_file, [[ts, serial, self.__class__.__name__, data]], '%s', delimiter=',')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33716509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档