【发布时间】:2016-12-26 09:26:12
【问题描述】:
我正在尝试编写一个相当复杂的 Python 程序,但基本上已经完成了。我在一个小细节上遇到了麻烦。
有问题的代码部分是这样的:
newData = kmeans.sampleNewData(200, means, covariances, priors)
newData = newData.astype(str)
...loops and logic and stuff...
newData[i, j] = columnsList[j][(indexList[j]).index(closestFit)]
基本上,newData 是一个大小为 200 x 4 的 numpy 矩阵,其中填充了浮点类型的数字。然后我使用astype 方法将它们转换为字符串。
然后我尝试将这个columnsList[j][(indexList[j]).index(closestFit)](它是一些字符串)放入newData 的条目中。
问题是columnsList[j][(indexList[j]).index(closestFit)]不一定是英文。例如,它可以是希伯来语。在这种情况下 - 我收到错误
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
值得注意的是,我写了# -*- coding: utf-8 -*-,所以我们用utf-8编码,当我打印columnsList[j][(indexList[j]).index(closestFit)]时,它确实打印了正确的值。所以我们可以打印它。但由于某种原因,我无法将其放入newData 矩阵中。
【问题讨论】:
-
astype(str)可能正在创建字节字符串数组。dtype是什么。那是ASCII。您可能需要指定 unicode dtype 来保存这些额外的字符。