python numpy.savetext一个混合格式的矩阵

时间:2018-04-05 10:52:04

标签: python numpy

我试图将文本另存为288个浮点数和最后一个字符串的矩阵,我使用了这样的savetxt:

np.savetxt('name', matrix, delimiter='  ', header='string', comments='', fmt= '%3f'*288 + '%s')

但是当我尝试运行代码时,会引发这样的异常:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\numpy\lib\npyio.py", line 1371, in savetxt
    v = format % tuple(row) + newline
TypeError: must be real number, not numpy.str_

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\numpy\lib\npyio.py", line 1375, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('<U32') and format specifier ('%3f(repeated 288 times without spaces)%s')

我真的不明白我错在哪里。

1 个答案:

答案 0 :(得分:3)

您的错误消息表明您提供字符串数据(dtype ('<U32')) - U32代表Unicode string - 但您的格式说明符是浮点数后跟一个字符串({{1} })。

由于你的矩阵已经是字符串,所以无论如何都没有必要尝试格式化它。如果您对浮点数不满意,您应该在输入此矩阵之前对其进行格式化。

所以,在你的情况下,只需使用:

来编写你现在的矩阵
'%3f(repeated 288 times without spaces)%s'

将每个元素视为一个字符串(实际上是它们)并将其写入文本文件。

如果你不满意,也许这个answer会提供一些线索。