6

我只是想确认字符串的默认数据类型是否是unicode在创建ndarray. 我找不到任何明确说明这一点的参考资料。可能是太明显了,不需要说明。

指定 dtype 时:

>>> import numpy as np
>>> g = np.array([['a', 'b'],['c', 'd']], dtype='S')
>>> g
array([[b'a', b'b'],
       [b'c', b'd']], 
      dtype='|S1')

不指定 dtype:

>>> g = np.array([['a', 'b'],['c', 'd']])
>>> g
array([['a', 'b'],
       ['c', 'd']], 
      dtype='<U1')

此外,当指定 dtype 时,字面b量表示什么。根据文档,它表明bool这里似乎不是这种情况。

有人可以澄清一下吗?

4

1 回答 1

9

b'...'意味着它是一个字节字符串,字符串数组的默认 dtype 取决于字符串的类型。Unicode(python 3 字符串是 unicode)是U并且 Python 2str或 Python 3bytes具有 dtype S您可以在此处的 NumPy 文档中找到 dtypes 的解释

数组协议类型字符串

第一个字符指定数据的类型,其余字符指定每个项目的字节数,Unicode 除外,它被解释为字符数。项目大小必须对应于现有类型,否则将引发错误。支持的种类有:

  • “?” 布尔值
  • 'b'(有符号)字节
  • 'B' 无符号字节
  • 'i'(有符号)整数
  • 'u' 无符号整数
  • 'f' 浮点数
  • 'c' 复数浮点数
  • 'm' 时间增量
  • 'M' 日期时间
  • 'O' (Python) 对象
  • 'S', 'a' 以零结尾的字节(不推荐)
  • 'U' Unicode 字符串
  • 'V' 原始数据(无效)

但是,在您的第一种情况下,您实际上强制NumPy 将其转换为字节,因为您指定了dtype='S'.

于 2017-09-05T09:58:29.013 回答