假设我有以下特殊数据集:
a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
[[4,5,6], 'austen', 'austen-sense']])
format
与
np.savetxt(f, a, fmt=format)
我已经基于函数documentation尝试了format=[[%d], %s, %s]
,但是仍然遇到TypeError。我在这里想念什么?
答案 0 :(得分:1)
一个简单的%s应该可以解决您的问题,尽管您也可以指定更复杂的格式,所以以下代码将起作用:
import numpy as np
a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
[[4,5,6], 'austen', 'austen-sense']])
np.savetxt("abc",a,fmt="%s")
为什么会出现错误,是因为默认格式为 float ,此处为%s ,我们将格式设置为字符串。
答案 1 :(得分:1)
In [119]: a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
...: [[4,5,6], 'austen', 'austen-sense']])
...:
In [120]: a
Out[120]:
array([[list([1, 2, 3]), 'austen', 'austen-emma'],
[list([4, 5, 6]), 'austen', 'austen-sense']], dtype=object)
对a
进行n复制粘贴会生成一个对象dtype数组。它包含字符串和列表。
我们可以指定一种非常通用的%s
格式:
In [121]: np.savetxt('test', a, fmt='%s, %s, %s') # or fmt='%s',delimiter=','
In [122]: cat test
[1, 2, 3], austen, austen-emma
[4, 5, 6], austen, austen-sense
结果是列表的打印表示形式,例如str([1,2,3]
和字符串。
但是csv
加载程序将无法处理列表表示形式。
我可以将定界符更改为;因此它不会与列表字符串中的混淆:
In [128]: np.savetxt('test', a, fmt='%s', delimiter=';')
In [129]: cat test
[1, 2, 3];austen;austen-emma
[4, 5, 6];austen;austen-sense
In [130]: np.genfromtxt('test',delimiter=';', dtype=str)
Out[130]:
array([['[1, 2, 3]', 'austen', 'austen-emma'],
['[4, 5, 6]', 'austen', 'austen-sense']], dtype='<U12')
不错-但是列表已作为字符串加载。
一种方法或其他方法(包括数组中的列表以及字符串)在加载时会产生问题。 csv
的标准格式无法处理同一行中的列表和字符串。通常csv
具有简单的值,例如。数字或字符串,由定界符分隔。它没有定义括号之类的语法功能。