下面的代码给出了TypeError。
from sklearn.model_selection import KFold
kf = KFold(n_splits=5,shuffle=False).split(range(25))
print('{} {:^61} {}'.format('Iteration','Training set observations','Testing set observations'))
for iteration, data in enumerate(kf, start=3):
print('{:^9} {} {:^25}'.format(iteration, data[0], data[1]))
类型错误:传递到 的格式字符串不受支持 numpy.ndarray.格式
当我们使用str(data[1])
时,代码给出了正确的输出
为什么需要这种显式字符串转换?
来自,例如,https://docs.python.org/3.4/library/string.html#format-specification-mini-language:
一般约定是空格式字符串 (
""
( 产生的结果与调用str()
值的结果相同。非空格式字符串通常会修改结果。
所以,当:^25
匹配到data[1]
时,调用data[1]
对象的__format__()
方法,就是numpy.ndarray
。这些对象遵循 Pythonlist
行为,即在格式字符串为非空时引发TypeError
。空格式字符串会导致在data[0]
(在您的示例中(调用str()
,以便这样做。非空格式字符串(即:^25
fordata[1]
(在 Python 中的列表上失败,因为 Python 中的标准列表可以是异构对象的集合,因此单个格式规范可能不适用于这样的列表:[1, 2.3, 'four']
。numpy
只是遵循相同的约定。
另请参阅 https://github.com/numpy/numpy/issues/5543 有关未解决的问题,请参阅numpy
的GitHub
页面。该问题似乎与您在帖子中提到的相同问题有关。