【问题标题】:Write object array to .txt file将对象数组写入 .txt 文件
【发布时间】:2023-03-22 23:36:01
【问题描述】:

当我这样做时

k=12

rsf = np.zeros((int(k), 9), dtype='object')

for i in range(0, int(k)):
    rsf[i, 0] = "FREQ"
    for j in range(1, 9):
        rsf[i, j] = sampled[8*i+j-1, 0]

然后试着写成

np.savetxt('test.txt', rsf, delimiter=',')

我收到错误数组 dtype ('object') 和格式说明符不匹配

对我如何克服这个问题有任何帮助吗? (并且可能附加到大小不相等的数组?)

【问题讨论】:

  • 我怀疑这会奏效。 np.savetxt 是由np.loadtxt 加载的,通常不可能加载未知的数据类型。为什么要在每一行的第一列添加相同的字符串?

标签: python numpy


【解决方案1】:

更多错误信息:

-> 1162                                     % (str(X.dtype), format))
   1163         if len(footer) > 0:
   1164             footer = footer.replace('\n', '\n' + comments)

TypeError: Mismatch between array dtype ('object') and format specifier ('%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e')

savetxt 正在遍历rsf 的行,并为每个尝试创建一个可以写入文件的字符串。如果没有您的 fmt 规范,它会尝试按列数重复的默认格式。那是format specifier

这是一个基本的 Python 字符串格式问题。

In [264]: row=rsf[1,:]

In [265]: row
Out[265]: array(['FREQ', 8, 9, 10, 11, 12, 13, 14, 15], dtype=object)

In [266]: '%s, %d, %d, %d, %d, %d, %d, %d, %d'%tuple(row)
Out[266]: 'FREQ, 8, 9, 10, 11, 12, 13, 14, 15'

所以你需要打电话给savetxt,比如:

In [267]: fmt='%s, %d, %d, %d, %d, %d, %d, %d, %d'

In [268]: np.savetxt('test.txt',rsf,fmt=fmt)

In [269]: cat test.txt
FREQ, 0, 1, 2, 3, 4, 5, 6, 7
FREQ, 8, 9, 10, 11, 12, 13, 14, 15
FREQ, 16, 17, 18, 19, 20, 21, 22, 23
FREQ, 24, 25, 26, 27, 28, 29, 30, 31
...

或者您可以使用通用的“%s”来简化格式

In [270]: np.savetxt('test.txt',rsf,fmt='%5s',delimiter=',')

In [271]: cat test.txt
 FREQ,    0,    1,    2,    3,    4,    5,    6,    7
 FREQ,    8,    9,   10,   11,   12,   13,   14,   15
 FREQ,   16,   17,   18,   19,   20,   21,   22,   23
 FREQ,   24,   25,   26,   27,   28,   29,   30,   31
 FREQ,   32,   33,   34,   35,   36,   37,   38,   39

【讨论】:

猜你喜欢
  • 2013-10-04
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
相关资源
最近更新 更多