我有一个空的unicode数组:

a = np.array([], dtype=np.str_)

我想对其进行编码:

b = np.char.encode(a, encoding='utf8')

为什么结果是dtype=float64的空数组?

# array([], dtype=float64)

如果数组不为空,则生成的数组是一个正确编码的数组,具有dtype=|S[n]:

a = np.array(['ss', 'ff☆'], dtype=np.str_)
b = np.char.encode(a, encoding='utf8')
# array([b'ss', b'ff\xe2\x98\x86'], dtype='|S5')

EDIT:事实上,下面公认的答案确实回答了提出的问题,但如果你来这里寻找解决方法,我就是这么做的:

if array.size == 0:
    encoded_array = np.chararray((0,))
else:
    encoded_array = np.char.encode(a, encoding='utf8')

如果解码的数组为空,这将生成一个带dtype='|S1'的空编码array.

推荐答案

numpy.char.encode的来源是here.它基本上调用_vec_string,在本例中返回np.object_类型的空array.该结果提供给_to_string_or_unicode_array_to_string_or_unicode_array构建最终数组并确定其类型.其代码为here.它基本上将Numpy数组转换为列表,然后将其提供给np.asarray.这个操作的目标是确定数组的类型,但问题是empty arrays have a default type of 108 by convention(我认为这是因为Numpy最初是为通常使用np.float64个数组的物理学家设计的).在这种情况下,这个结果是相当出乎意料的,但"S0"并不存在,我不确定每个人都会同意"S1"类型在这里更好(尽管如此,它肯定比np.float64更好).欢迎致电fill an issue on the GitHub Numpy repository,开始讨论这种行为.

Python-3.x相关问答推荐

Pandas—在特定列上比较两行双框,并根据特定条件保留其中一行?

正则表达式匹配并提取括号前的单词

Numpy argmin()以查找最近的元组

Django 模型类方法使用错误的 `self`

tkinter treeview 如何在获取所选项目时将设置的对象作为对象返回

两个 y 轴在零处对齐的 plotly barplot

Pandas 在每组两个条件之间获得时间增量

删除Pandas 数据框行不起作用

段落中句子的索引

正则表达式:匹配字符串中的分隔符(字母和特殊字符)以形成新的子字符串

为什么 Django South 1.0 使用 iteritems()?

'~'(波浪号)运算符在 Python 中的应用

if 语句中冒号的语法错误

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

Python:在 map 对象上调用列表两次

在没有时间的python中创建日期

将 args、kwargs 传递给 run_in_executor

类型提示返回 NameError: name 'datetime' not defined

如何正确创建自定义文本编解码器?

用 Anaconda 安装了一个包,无法在 Python 中导入